Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1194562284
pavel
2007-11-09 01:51
2007.12.09
Списки очередей


2-1194370102
lobach
2007-11-06 20:28
2007.12.09
Как спрятать программу от диспетчера задач???


15-1194942281
Kerk
2007-11-13 11:24
2007.12.09
На Украине закрыли Блоггер.ком?


5-1163317682
alextorin
2006-11-12 10:48
2007.12.09
Пакет с собственными формами (наследование + IDE)


2-1195023978
andreoman
2007-11-14 10:06
2007.12.09
по каким портам происходит ping





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский