Показать сообщение отдельно
  #1  
Старый 14.10.2009, 04:04
vbn vbn вне форума
Прохожий
 
Регистрация: 14.10.2009
Сообщения: 1
Репутация: 10
По умолчанию Как дождаться завершения процедуры?

Есть процедура, которая многократно выполняется в головной программе:
Код:
procedure mEmDmU(i,j: Cardinal);
begin

SetCursorPos(i,j);
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);

end;
Проблема в том, что при многократных вызовах иногда не успевают обработаться или вовсе не обрабатываются процедуры SetCursorPos, Mouse_Event.
Помогает вставка процедуры Sleep(X), но на разных компьютерах и при разной загрузке процессора это X может быть меньше или больше, а время работы программы очень нужно сократить, и минимальное оптимальное X неизвестно.

Application.ProcessMessages - не помогает.

5 часов копался в интернете, так и не понял. Запутался в этих процедурах WaitForInputIdle, SleepEx, WaitForSingleObject, GetQueueStatus и т.д. Что же здесь может помочь, чтобы заставить эти процедуры выполняться последовательно, без неразберихи? И неужели без потоков решить проблему не удастся? Это что же, на каждый Mouse_Event теперь поток создавать?
Ответить с цитированием