2016-04-21 2 views
-3

Dears, здесь у меня есть небольшая программа, которую нужно выполнить ниже действий/процессов последовательно. теперь я делаю ниже одну функцию, кажется, не очень хорошо :)Как выполнять мои действия последовательно с некоторым сном во время этого? (C++, winapi)

  1. интерфейс пользователя init, очистить поле EDIT, Listview; запустите статус кнопок и т. д .;

  2. источник питания устройства;

  3. требуется 20 секунд сна или таймер, поскольку устройству требуется время для запуска;

  4. подключиться к устройству, прочитать некоторые данные;

  5. требуется 3 секунды, чтобы ждать обратной связи с устройства;

  6. получил ответ от устройства, декодировал данные и отобразил их на пользовательском интерфейсе;

...

На данный момент, я просто использовать сон() в моей программе, и сделать вышеуказанные шаги один за другим. К счастью, узнайте из stackoverflow, что мой текущий способ не очень хорош, обратная связь и обновление пользовательского интерфейса очень медленные, а иногда и программа даже замерзает, довольно глупо.

И некоторые старшие ребята сказали мне, что я должен использовать таймер вместо сна.

Итак, мой вопрос: Как использовать таймер в моей текущей программе? (просто сделайте это, как MSDN сказать?) Как я могу улучшить его основы на вышеуказанном требовании? Нужно ли мне многопоточность?

Извините за столько вопросов :)

В самом деле, я хочу, чтобы все лучше.

спасибо, что заранее.

+1

Не используйте опрос вообще (использование произвольного сна является предшественником опроса). Ваше приложение будет лучше, если вы подписаны на события и ответьте на них. Используйте таймер только для выполнения тайм-аутов. – IInspectable

+0

И в случае отсутствия событий, следующий лучший вариант - использовать рабочий поток для опроса устройства в цикле со сном на каждой итерации цикла. В любом случае, управление устройством определенно не входит в основной поток пользовательского интерфейса вашего приложения. –

+0

@ Невозможно, большое спасибо за вашу помощь. На самом деле, я не могу понять, что вы сказали «Не используйте опрос вообще», что это значит? Вы имеете в виду, что я не должен использовать слишком много сна() в своей программе? еще раз спасибо. – NYwalker

ответ

0

Вы не указали, если вы используете конкретные рамки, поэтому я собираюсь взять на себя окно приложения, используя родную Windows API напрямую:

Вызов SetTimer передавая ему свой дескриптор окна (HWND), и желаемыми интервал таймера и NULL для TimerProc.

Процедура вашего окна будет периодически размещаться в сообщении WM_TIMER - вы можете использовать параметр ID, который вы передали SetTimer, в случае, когда вы инициировали несколько таймеров, и, в конечном итоге, KillTimer, когда вам это больше не нужно.

+0

Вы правы. Я использую приложение Windows, основанное на winapi, извините за отсутствие его указания. Вы имеете в виду, что я должен создать много таймеров для разных временных интервалов, между тем, указать различные события в таймерах для обработки? Извините за мой английский. большое спасибо. – NYwalker

+0

Я имею в виду, что вы можете, если хотите, указать много разных таймеров и рассказать им обособленно по id. –