|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.10.2009, 04:31 | #1 |
Пользователь
Регистрация: 14.04.2007
Сообщений: 28
|
Как дождаться завершения процедуры?
Есть процедура, которая многократно выполняется в головной программе:
Код:
Помогает вставка процедуры Sleep(X), но на разных компьютерах и при разной загрузке процессора это X может быть меньше или больше, а время работы программы очень нужно сократить, и минимальное оптимальное X неизвестно. Application.ProcessMessages - не помогает. 5 часов копался в интернете, так и не понял. Запутался в этих процедурах WaitForInputIdle, SleepEx, WaitForSingleObject, GetQueueStatus и т.д. Что же здесь может помочь, чтобы заставить эти процедуры выполняться последовательно, без неразберихи? И неужели без потоков решить проблему не удастся? Это что же, на каждый Mouse_Event теперь поток создавать? |
14.10.2009, 13:13 | #2 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
вообще если вы такие процедуры многократно юзаете, то стоит помоему сначало разобратся в том как винда работает...а именно я говори про сообщения. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
14.10.2009, 13:53 | #3 |
Пользователь
Регистрация: 14.04.2007
Сообщений: 28
|
Ага, как видно из кода, сообщения идут не нашему окну.
Вот предположим мы вызываем эту процедуру, в которой выполняется код: Код:
Может проверять позицию курсора после вызова SetCursorPos(i,j)? Например, вот так: Код:
Как заставить любую процедуру, любой код, будь то SetCursorPos, Mouse_Event или любая другая процедура отработать полностью до конца, не передавая дальнейшее управление программе, т.е. не выполняя дальнейший код, пока процедура полностью не отработает? |
14.10.2009, 14:01 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А что ты хочешь сделать в принципе?
Почему именно этот способ?
I'm learning to live...
|
14.10.2009, 14:34 | #5 |
Пользователь
Регистрация: 14.04.2007
Сообщений: 28
|
Мне не важен способ, мне главное чтобы не нарушалась последовательность выполнения кода...
Программа должна перемещать курсор в определенную область экрана и делать там нажатие кнопки мыши, затем перемещать в другую область и нажимать там. Каким способом это реализовать мне не важно, главное лишь безошибочность работы и быстродействие. Дело в том, что в настоящий момент есть проблема: как я уже сказал, не успевает еще завершиться обработчик первого вызова процедуры SetCursorPos или Mouse_Event, как уже вызывается следующий. Приведу код полностью: Код:
Код:
Устроит любое, желательно конечно же простое решение. Простановка Sleep(10) после каждого вызова Mouse_Event помогает, в этом случае уже практически не возникает сбоя в порядке перемещений мыши. Но 10 мс не всегда достаточно. Можно ставить 15. Но и этой задержки может не хватить для корректного срабатывания программы. И не красивый этот способ. Да к тому же еще и длительный по времени. Прошу, помогите... |
14.10.2009, 14:38 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
14.10.2009, 14:46 | #7 |
Пользователь
Регистрация: 14.04.2007
Сообщений: 28
|
Помогло! Большое спасибо! Пока что работает. При этом оказалось достаточно использования Sleep(0). Пока вопросов больше нет.
Код:
Последний раз редактировалось Hintman; 14.10.2009 в 15:23. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ожидание завершения потоков | Voody | Общие вопросы Delphi | 11 | 14.06.2016 06:10 |
Как программно вызвать окно завершения работы | UfoRoot | Win Api | 4 | 21.01.2009 11:15 |
Перехват завершения работы ОС | vynt | Win Api | 7 | 19.05.2008 08:59 |
Ждать завершения чужого процесса | ERASERROR | Win Api | 2 | 04.02.2008 08:23 |
Как запустить приложение, дождаться его исполнения и только потом выполнять код? | il76 | Win Api | 6 | 19.07.2007 14:00 |