Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Ожидание переменной   Найти похожие ветки 

 
allucard   (2007-11-15 10:36) [0]

Доброго дня.

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


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.

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

Спасибо.


 
Reindeer Moss Eater ©   (2007-11-15 10:38) [1]

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


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

См. TThread и TCriticalSection.


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


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


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


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


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

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


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

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


 
clickmaker ©   (2007-11-15 11:29) [6]


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

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


 
allucard   (2007-11-15 11:29) [7]


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


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

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


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


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


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


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


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


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


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


> allucard   (15.11.07 11:50) [9]



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


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


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

нужно,

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

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

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

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

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

?


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


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


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


 
Jeer ©   (2007-11-15 12:29) [13]


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


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


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


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

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


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


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


Чудесно.

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


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

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

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


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


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


Сравнить GetCurrentThreadId с MainThreadId


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
2-1195119506
авыф
2007-11-15 12:38
2007.12.09
Как в рантайме у DataSource поменять DataSet


2-1195042098
WFS
2007-11-14 15:08
2007.12.09
Как обработать нажатие Отмены в окне открытия файла?


1-1190018023
andreoman
2007-09-17 12:33
2007.12.09
проблема отображения всплывающей подсказки


15-1194738002
Kostafey
2007-11-11 02:40
2007.12.09
С днем рождения ! 11 ноября


3-1185952264
dimaL
2007-08-01 11:11
2007.12.09
Хранимые процедуры Interbase