Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Вниз

ProcessMessages в Dll   Найти похожие ветки 

 
vetas   (2006-07-24 16:40) [0]

Добрый день, Мастера
Вот возникла проблемка: хочу организовать задержку в Dll. В принципе ProcessMessages+GetTickCount эту проблему решает, но как его использовать в Dll? Sleep не подходит.


 
Сергей М. ©   (2006-07-24 16:42) [1]


> Sleep не подходит


Это почему же ?

Только, умоляю, не говори, что у тебя что-то там "виснет" в случае со Sleep()...


 
vetas   (2006-07-24 16:49) [2]

> Только, умоляю, не говори, что у тебя что-то там "виснет" в случае со Sleep()...

Sleep не виснет, просто другие сообщения обрабатываются после отработки Sleep. Т.е. я поставил Sleep(10000)  - не работает ни один обработчик, пока не пройдет 10с.


 
vetas   (2006-07-24 16:57) [3]

Ну точно не работает...
Написал такой тест

procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(10000);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage("1111");
end;

Button2 не вызывается до тех пор, пока не отработает sleep...


 
Сергей М. ©   (2006-07-24 17:01) [4]

Ну тады вместо sleep() используй MsgWaitForMultipleObjects()


 
Сергей М. ©   (2006-07-24 17:04) [5]


> Ну точно не работает


Ну разумеется не будет работать !
sleep() же не занимается ожиданием/выборкой/диспетчеризацией сообщений - она просто блокирует выполнение тек.потока на указанное кол-во миллисекунд, переводя поток в kernel time


 
vetas   (2006-07-24 17:11) [6]

А в MsgWaitForMultipleObjects() вторым параметром идет хендл приложения... Знать бы этот хендл, можно было бы и ProcessMessages+GetTickCount использовать...


 
Пусик ©   (2006-07-24 20:21) [7]


> vetas   (24.07.06 16:40) 


Лучше скажи, что ты сделать хочешь...


 
KilkennyCat ©   (2006-07-24 20:24) [8]

> [7] Пусик ©   (24.07.06 20:21)

и так ясно.. хочет притормозить одно, пока выполняется другое, а шить нитки сложно...


 
Ketmar ©   (2006-07-24 20:59) [9]

>vetas   (24.07.06 17:11) [6]
кто курит хэлпы по утрам -- тот поступает мудро. то тут пять строк, то там пять строк -- на то оно и утро.

намёк ясен?


 
vetas   (2006-07-25 17:02) [10]

Решение я нашел - благо все функции Delphi доступны в открытом коде. Если кому интересно - вот:

procedure Delay1sec;
Var M      : dword;
   Msg    : TMsg;
Begin
M:=GetTickCount;
while M+1000>GetTickCount do
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
 end;
End;


>Ketmar ©   (24.07.06 20:59) [9]
Обычно участники форума стараются помочь хотя-бы советом, скажем сообщают, в каком направлении копать. А то что хелп почитать - это я и так знаю.


 
Сергей М. ©   (2006-07-25 17:03) [11]


> vetas   (25.07.06 17:02) [10]


Малацца.
Ты ничерта не понял про kernel-time.


 
Ketmar ©   (2006-07-25 18:22) [12]

>vetas   (25.07.06 17:02) [10]
а ещё иногда вообще хэлп цитируют. удобно, правда? даже F1 жать не надо. я уж молчу о том, что мозги вопрощающего существенно экономятся.
если бы информация в хэлпе не находилазь за несколько минут, я бы дал направление конкретней.

а то, что ты знаешь -- оно, может, и так. но знания не используешь -- это факт.


 
FireMan_Alexey ©   (2006-07-28 13:17) [13]

Привет!

Цитата из хелпа!!!!!

MsgWaitForMultipleObjects(Кол-во елементов массива, Указатель на массив с елементами (EVENTS),ждать одного или всех,интервал в м.сек,тип event-a);
для создания Event-a
CreateEvent- Смотри в хелп!!!!!!!!!!!!!


 
Сергей М. ©   (2006-07-28 13:26) [14]


> FireMan_Alexey ©   (28.07.06 13:17) [13]


> тип event-a);
> для создания Event-a
> CreateEvent


input event (как событие ввода) и event (как объект синхронизации, результат вызова CreateEvent) - не одно и то же.


 
ISK(CMEPTb)   (2006-07-28 18:41) [15]


> Сергей М. ©   (28.07.06 13:26) [14]

> input event (как событие ввода) и event (как объект синхронизации,
>  результат вызова CreateEvent) - не одно и то же.

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


> FireMan_Alexey ©   (28.07.06 13:17) [13]

Ты же уже вроде всё ему про отдельные потоки расказал... Если конечно он хоть что-то понял :)))


> vetas   (25.07.06 17:02) [10]
> Обычно участники форума стараются помочь хотя-бы советом,
>  скажем сообщают, в каком направлении копать. А то что хелп
> почитать - это я и так знаю.

Копают, обычно в направлении земли... лопатой! :)



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

Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.045 c
3-1150018686
cosmos
2006-06-11 13:38
2006.08.20
Как физически удалить записи из dbf?


9-1132981739
rtyrt
2005-11-26 08:08
2006.08.20
Как определить поддерживается ли OpenGL аппаратно или нет?


15-1153309380
Vudu
2006-07-19 15:43
2006.08.20
Старый комп + винт на 250 Гб


15-1153740447
ZeroDivide
2006-07-24 15:27
2006.08.20
Что вас заставляет метать бисер?


15-1153491701
stud
2006-07-21 18:21
2006.08.20
осаго при дтп. вот вопрос.





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