Синхронизация потоков (лаз-фпц) (+)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Синхронизация потоков (лаз-фпц) (+)

Сообщение RED_DRAGON » 21.04.2009 09:04:09

Уважаемые господа, мож кто сталкивался:
winXP, laz 0.9.26
Есть два потока (основное приложение + вспом поток (работа с компортом)). Не могу синхрануть данные из второго потока. При том, что обмен данными с перифирийным устройством идет в других ветвях программы - все ок.
Затык получился при передаче значений двух интов из массива данных основного потока (буфер входных данных в основном потоке) в инты основного же потока в функции вспом потока (который синхрится с основным потоком истественно). После приравнивания этих интов вполне конкретным значениям, они в основном потоке = 0 (введение дополнительных sleep'ов не катит).
В основном потоке есть цикл repeat-until который крутиться до получения флажка о готовности данных. Флажек встает, доходим до разборки полученных данных - они нулевые (не приравненны фактическим значениям). Если же я в дибаг целях ввожу application.messagebox для вывода этих переменных, то опять в мессджбоксе вижу их 0/0, но после нажатия ок, они принимают положенные значения :(

Ткните носом чего я делаю не так или где глюк?
RED_DRAGON
новенький
 
Сообщения: 13
Зарегистрирован: 09.01.2009 13:53:16

Re: Синхронизация потоков (лаз-фпц) (+)

Сообщение shade » 21.04.2009 13:32:53

В основном потоке есть цикл repeat-until который крутиться до получения флажка о готовности данных

В WinAPI есть функция WaitForSingleObject, в *nix: системные вызовы wait, waitpid, wait4

без кода сложно что-то сказать.
я так думаю передающий поток должен
1. записать данные в нужное место (например, для начала в обычной глобальной переменной)
2. потом сигналировать об окончании (установить флаг, или сигнралировать евент: SetEvent)

принимающий поток должен
1. ожидать сигнала WaitForSingleObject или цикл
2. взять данные их указаного места.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 26

Рейтинг@Mail.ru