Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Многопоточность в VB Добавлено: 14.07.10 00:57  

Автор вопроса:  Serg
Привет Всем !

Есть у меня такая задача, знаю что можно только вот не пойму пока как это на деле сделать. Есть две функции первая через точный промежуток времени выдает сигнал в ЛПТ порт компьютера а вторая паралельная функция должна отлавливать флажек который вылетает в первой функции после определенного колличества сигналов и сичитывать значение с Ком порта..


Все написано.. только не разберусь с потоками.. может кто пробовал использовать их в своих приложениях ? обьясните как их правильно готовить :) Заранее благодарен !

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 14.07.10 02:20
В .NET использовал. Рассказ о том как правильно готовить можно растянуть на целую книгу.

Но у тебя VB6? Не вдаваясь в подробности, ничего хорошего не получится.
Если очень нужно, можно попробовать сделать на таймерах.

Ответить

Номер ответа: 2
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #2 Добавлено: 14.07.10 11:03
На VB6 можно благополучно использовать отдельные проги, приоритет повыше, синхронизировать тоже можно более или менее.
Но всё это колдовство от лукавого конечно...

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 14.07.10 11:47
Можно использовать потоки. Но для хорошей, годной многопоточности лучше обернуть потоки в COM. Тогда VB6 не будет вылетать, и даже, по-моему, позволит проходить по шагам. Еще вариант юзать .NET-обертку в VB.

Ответить

Номер ответа: 4
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #4 Добавлено: 14.07.10 15:16
VβÐUηìt пишет:
лучше обернуть потоки в COM

а слабо показать кодом, как именно ты это хочешь сделать :)

Библиотеки msvbvm60.dll разные бывают.

Ответить

Номер ответа: 5
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #5
Добавлено: 14.07.10 15:24
http://www.codenet.ru/progr/vbasic/threads.php

Бо?

Ответить

Номер ответа: 6
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #6 Добавлено: 14.07.10 16:14
Незнаю нафиг, незнаю, такое я тоже видел.
НЕСТАБИЛЬНО!!!

Ответить

Номер ответа: 7
Автор ответа:
 Serg



Вопросов: 1
Ответов: 2
 Профиль | | #7 Добавлено: 14.07.10 23:55
А как можно сделать чтобы стабильно было ? Чтобы главное первый поток как часы работал а второй просто по сигналу значение сохранял..

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 15.07.10 02:06
Сделать на нормальном языке программирования (C++, .NET)

Я тебе привел один из вариантов как это сделать на VB6 - таймерами. Будет работать в буквальном смысле этого слова "как часы"

Ответить

Номер ответа: 9
Автор ответа:
 Serg



Вопросов: 1
Ответов: 2
 Профиль | | #9 Добавлено: 15.07.10 02:30
На таймерах не получится ... они очень тормозные ..

у меня подпрограмма задержки выглядит следующим образом

Sub delay(Wait As Long)
Dim temp, val As Long

    For temp = 0 To Wait
         val = val + 1
    Next
    
End Sub


Где Wait в основном =15000 варьируя задержкой частота сигналов доходит до 20кГц.

Проблема в том что при считывании с ком порта весь код замирает на время до получения инфы при этом теряется стабильность импульсов. Весь смысл второго потока в том чтобы он обрабатывал ком порт пока главный цикл(поток) подходит к следующей точке. и.т.д.

На счет написания на другом языке, думаю не прокатит, какая разница каким ножем колбасу резать, ведь результат будет один и тот-же. В моем случае скорости приложения хватает в полне, а работа с ком портом на другом языке сомневаюсь что увеличит его скорость.

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 15.07.10 04:33
  1. Sub delay(Wait As Long)
  2. Dim temp, val As Long
  3.  
  4.     For temp = 0 To Wait
  5.          val = val + 1
  6.     Next
  7.     
  8. End Sub


Не завидую людям, которые пишут для ОС реального времени.

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 18.07.10 21:47
может лучше использоваь апи gettickcount? сохраняешь точку начала задержки, потом в цикле проверяешь не прошло ли указанное количество времени. Геттиккаунт правда лажает раз в ~42 дня аптайма) но думаю некритично

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 18.07.10 23:48
У GetTickCount низкое разрешение.

У меня 15-16 мс. Это чуть больше 60 герц.

Ответить

Номер ответа: 13
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #13
Добавлено: 19.07.10 00:03
Artyom, но ведь в этом больше смысла, чем задержка с помощью цикла. Она же варьируется в зависимости от машины

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 19.07.10 08:27
Более того, варьируетяс даже на одной и той же машине :)

Челу надо почитать про методы работы с портами. Скорее всего, есть инструментарий, позволяющий не опрашивать порт постоянно, а использовать буферизированую модель - данные из порта попадают в буфер, откуда их можно считывать порциями по мере поступления

Ответить

Номер ответа: 15
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #15
Добавлено: 16.08.10 20:49
vbnet.ru примеры - многопоточность ищите там

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам