Главная страница
    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.051 c
15-1194524177
Dragon
2007-11-08 15:16
2007.12.09
Стоимость программы на Delphi


9-1164063132
Горгер
2006-11-21 01:52
2007.12.09
Вывод битмапа на плоскость OpenGL


2-1194909119
Елена
2007-11-13 02:11
2007.12.09
Отсылка письма.


15-1194706734
Kick
2007-11-10 17:58
2007.12.09
Невизуальные классы delphi


10-1141146183
msgipss
2006-02-28 20:03
2007.12.09
Возможно ли вызвать процедуру открытого документа Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский