Форум: "Начинающим";
Текущий архив: 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.042 c