![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ProcessMessages в Dll [D7, XP]
vetas © (2006-07-24 16:40:00)Добрый день, Мастера
Вот возникла проблемка: хочу организовать задержку в Dll. В принципе ProcessMessages+GetTickCount эту проблему решает, но как его использовать в Dll? Sleep не подходит.
ISK(CMEPTb) (2006-07-28 18:41:00) [1]
> Сергей М. © (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]
> Обычно участники форума стараются помочь хотя-бы советом,
> скажем сообщают, в каком направлении копать. А то что хелп
> почитать - это я и так знаю.
Копают, обычно в направлении земли... лопатой! :)
Сергей М. (2006-07-28 13:26:00) [2]
> FireMan_Alexey © (28.07.06 13:17) [13]
> тип event-a);
> для создания Event-a
> CreateEvent
input event (как событие ввода) и event (как объект синхронизации, результат вызова CreateEvent) - не одно и то же.
FireMan_Alexey (2006-07-28 13:17:00) [3]Привет!
Цитата из хелпа!!!!!
MsgWaitForMultipleObjects( Кол-во елементов массива, Указатель на массив с елементами (EVENTS),ждать одного или всех,интервал в м.сек, тип event-a );
для создания Event-a
CreateEvent- Смотри в хелп!!!!!!!!!!!!!
Ketmar (2006-07-25 18:22:00) [4]>vetas (25.07.06 17:02) [10]
а ещё иногда вообще хэлп цитируют. удобно, правда? даже F1 жать не надо. я уж молчу о том, что мозги вопрощающего существенно экономятся.
если бы информация в хэлпе не находилазь за несколько минут, я бы дал направление конкретней.
а то, что ты знаешь -- оно, может, и так. но знания не используешь -- это факт.
Сергей М. (2006-07-25 17:03:00) [5]
> vetas (25.07.06 17:02) [10]
Малацца.
Ты ничерта не понял про kernel-time.
vetas (2006-07-25 17:02:00) [6]Решение я нашел - благо все функции 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]
Обычно участники форума стараются помочь хотя-бы советом, скажем сообщают, в каком направлении копать. А то что хелп почитать - это я и так знаю.
Ketmar (2006-07-24 20:59:00) [7]>vetas (24.07.06 17:11) [6]
кто курит хэлпы по утрам -- тот поступает мудро. то тут пять строк, то там пять строк -- на то оно и утро.
намёк ясен?
KilkennyCat (2006-07-24 20:24:00) [8]> [7] Пусик © (24.07.06 20:21)
и так ясно.. хочет притормозить одно, пока выполняется другое, а шить нитки сложно...
Пусик (2006-07-24 20:21:00) [9]
> vetas (24.07.06 16:40)
Лучше скажи, что ты сделать хочешь...
vetas (2006-07-24 17:11:00) [10]А в MsgWaitForMultipleObjects() вторым параметром идет хендл приложения... Знать бы этот хендл, можно было бы и ProcessMessages+GetTickCount использовать...
Сергей М. (2006-07-24 17:04:00) [11]
> Ну точно не работает
Ну разумеется не будет работать !
sleep() же не занимается ожиданием/выборкой/диспетчеризацией сообщений - она просто блокирует выполнение тек.потока на указанное кол-во миллисекунд, переводя поток в kernel time
Сергей М. (2006-07-24 17:01:00) [12]Ну тады вместо sleep() используй MsgWaitForMultipleObjects()
vetas (2006-07-24 16:57:00) [13]Ну точно не работает...
Написал такой тест
procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(10000);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('1111');
end;
Button2 не вызывается до тех пор, пока не отработает sleep...
vetas (2006-07-24 16:49:00) [14]> Только, умоляю, не говори, что у тебя что-то там "виснет" в случае со Sleep()...
Sleep не виснет, просто другие сообщения обрабатываются после отработки Sleep. Т.е. я поставил Sleep(10000) - не работает ни один обработчик, пока не пройдет 10с.
Сергей М. (2006-07-24 16:42:00) [15]
> Sleep не подходит
Это почему же ?
Только, умоляю, не говори, что у тебя что-то там "виснет" в случае со Sleep()...