Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.03.2012, 19:18
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
Вопрос Задержка между кодом программы

Всем привет. Возникла такая проблемка. Как реализовать задержку между кодом программы без применения sleep().
Код:
procedure dvizhok();
delay(10000);
 keybd_event(1,29,0,0);
 delay(100);
 setcursorpos(812,560);
 delay(100);
 mouse_event(mouseeventf_move,1,0,0,0);
 delay(100); 
end;
Delay беру от сюда.
Код:
procedure Delay (Milliseconds: Integer);
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
(MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := Tick - GetTickcount;
if Application.Terminated then Exit;
end;
finally
CloseHandle(Event);
end;end;
Вроде все правильно ниче не подвисает, но когда вызывается процедура Delay доходит до Application.ProcessMessages; обновлется окно и процедура dvizhok выполняется по новой не дойдя до конца.
Ответить с цитированием
  #2  
Старый 03.03.2012, 19:35
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Сделать этот код в отдельном потоке и там смело применять Sleep. И пока поток выполняется, не запускать второй его копии.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 03.03.2012, 19:51
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Как мне дождатся завершения потока?
Ответить с цитированием
  #4  
Старый 03.03.2012, 19:53
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А его ещё и дожидаться надо? Вообще флаг Terminated вроде, но не проще тогда код, который после завершения, в конец потока дописать?..
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 03.03.2012, 19:57
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

WaitForSingleObject
Ответить с цитированием
  #6  
Старый 03.03.2012, 19:59
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

По сегоднешнему поиску по форуму на счет флага terminated это приостановка потока.
Цитата:
но не проще тогда код, который после завершения,
Какой именно код нужно дописать?
Ответить с цитированием
  #7  
Старый 03.03.2012, 20:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Что должно происходить после завершения потока?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 03.03.2012, 20:32
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

должен перейти ниже к строчке keybd_event(1,29,0,0); ,потом опять выполняется процедура delay,(в нем будет находится поток),ожидается завершение потока и переходит к setcursorpos(812,560) и т.д.
Ответить с цитированием
  #9  
Старый 03.03.2012, 20:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я имел в виду ВЕСЬ код этой процедуры запихать в поток, и все DELAY заменить на SLEEP.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 03.03.2012, 20:47
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Ёлки иголки!, а я целый день мучаюсь как реализовать.Спасибо за советы.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025