Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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()...


Наверх

Титульная страница Поиск, карта сайта Написать письмо