Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ожидание переменной [D7, XP]


allucard ©   (2007-11-15 10:36:00) 

Доброго дня.

Поскажите, как организовать ожидание переменной?


function TMTMOle.Config(update: byte): string;
begin
   if update=1 then
     begin
        write_marya_trans('CONF');
        while form1.kol_cmd <> 0 do begin end;
     end;
   result:=form1.Conf.Full_CONF;
end;

Переменной Result нельзя присваивать значение, пока form1.kol_cmd не будет равно 0.

я сделал пустой цикл, а можно как то, чтобы не натупить систему?

Спасибо.


allucard   (2007-11-15 12:52:00) [1]

Пасиб, буду разбираться.


Сергей М.   (2007-11-15 12:49:00) [2]


> не шарю в потоках


При таких вопросах пора бы уже начинать потихоньку "шарить", ибо ты клонишь к параллельности вычислений.


Сергей М.   (2007-11-15 12:48:00) [3]


> как это выяснить?


Сравнить GetCurrentThreadId с MainThreadId


allucard   (2007-11-15 12:46:00) [4]

я не шарю в потоках :(

как это выяснить?


Сергей М.   (2007-11-15 12:39:00) [5]


> у него есть событие OnRxChar, и оно срабатывает


Чудесно.

Вот и займись для начала выяснением того, в каком потоке вызывается обработчик этого события.


allucard   (2007-11-15 12:36:00) [6]


> Сергей М. ©   (15.11.07 12:26) [12]

я не реализовывал механизм потоков.
я использовал компонент TComPort, у него есть событие OnRxChar, и оно срабатывает когда приходят данные.
я обрабатываю это событие, в результате чего form1.kol_cmd = 0.


Jeer   (2007-11-15 12:29:00) [7]


> так как вызов этой функции (TMTMOle.Config) происходит из
> другой клиентской программы посредством механизма OLE,


Ну поехала перепостановка задачи.


Сергей М.   (2007-11-15 12:26:00) [8]


> по приходу данных с ком порта, сработает определённое событие


В каком потоке ?


allucard   (2007-11-15 12:01:00) [9]

нужно,

1. Или не выходить из процедуры TMTMOle.Config

2. Или зайти в неё снова, с места прихода данных.

1-е просто, но будет подтупливать систему, и мне бы самый менее тупящий систему способ(с циклом + sleep это не выход), в TThread не разбирался, остаётся Application.ProcessMessages().

а 2-й отличный способ, не тупит систему, но я не знаю как его реализовать, так как вызов этой функции (TMTMOle.Config) происходит из другой клиентской программы посредством механизма OLE, и даст ли мне что-то если я её вызову с кода своей серверной программы.

type
 TMTMOle = class(TAutoObject)
 automated
   function Config(update: byte): string;
 end;

?


Jeer   (2007-11-15 11:55:00) [10]


> allucard   (15.11.07 11:50) [9]



> сработает определённое событие


Кто мешает на это событие навесить все что тебе нужно, а не только kol_cmd = 0 ?


allucard   (2007-11-15 11:50:00) [11]


> Сергей М. ©   (15.11.07 11:37) [8]


по приходу данных с ком порта, сработает определённое событие, и данные обработаются, а в результате обработки form1.kol_cmd станет равным 0


Сергей М.   (2007-11-15 11:37:00) [12]


> 0 окажется в переменной из другой функции программы через
> секунду


С какого перепугу "из другой функции", если в данныймомент выполняется функция TMTMOle.Config ?


allucard   (2007-11-15 11:29:00) [13]


> Anatoly Podgoretsky ©   (15.11.07 11:16) [5]


0 окажется в переменной из другой функции программы через секунду.

это имели ввиду?


clickmaker   (2007-11-15 11:29:00) [14]


> как то, чтобы не натупить систему?

Sleep(), Application.ProcessMessages()
Но лучше глянь в сторону TEvent


Anatoly Podgoretsky   (2007-11-15 11:16:00) [15]

Про протокол никто не спрашивал, перечитай снова вопрос [3] и пока не будет на него ответа, сказать нечего.


allucard   (2007-11-15 10:46:00) [16]


> Сергей М. ©   (15.11.07 10:41) [3]

Ну, это в протоколе, когда команда с ком порта прийдёт полностью


Сергей М.   (2007-11-15 10:41:00) [17]


> пока form1.kol_cmd не будет равно 0


А при каких условиях 0 окажется в этой переменной ?


Юрий Зотов   (2007-11-15 10:39:00) [18]

См. TThread и TCriticalSection.


Reindeer Moss Eater   (2007-11-15 10:38:00) [19]

if InputQuery(...) then
....


Наверх

Титульная страница Поиск, карта сайта Написать письмо