Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизОжидание переменной Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c