Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.021 c
2-1194894940
alikon1
2007-11-12 22:15
2007.12.09
Работа со скобками


1-1190308769
wipr
2007-09-20 21:19
2007.12.09
Подскажите где можно взять BDE_ENT.Msm


15-1194354763
авыф
2007-11-06 16:12
2007.12.09
Запись формы.


6-1175622907
Tiberius
2007-04-03 21:55
2007.12.09
Где найти ieConst.pas и IEDocHostUIHandler.pas


3-1185537092
Nemec
2007-07-27 15:51
2007.12.09
компоненты TIBQuery и IBUpdateSQL1




   Наверх