Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.088 c
15-1153478322
Jeer
2006-07-21 14:38
2006.08.20
Программазм или "одиночка vs конвейр"


2-1154079558
Ega23
2006-07-28 13:39
2006.08.20
Разрушается ли Glyph у SpeedButton?


2-1154109859
Lexx_Lamer
2006-07-28 22:04
2006.08.20
Вот задачка!!!


2-1154404374
D@Nger
2006-08-01 07:52
2006.08.20
QuickReport и PageCount


15-1153396116
Footballer
2006-07-20 15:48
2006.08.20
Сильно тупит мышка! :-(