Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как работает приведенный код. Таймер ожидания / 2 сообщений из 2, страница 1 из 1
05.04.2014, 02:00
    #38605942
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает приведенный код. Таймер ожидания
Помогите, пожалуйста, разобраться с кодом. Мне нужно использовать таймер ожидания и у меня есть фрагмент кода, но я не до конца понимаю как он работает

Код: plaintext
1.
2.
3.
4.
5.
6.
LARGE_INTEGER li;
const int nTimerUnitsPerSecond = 10 000 000;
int timeout::timeout;
HANDLE hTimer = CreateWaitableTimer(0, FALSE, 0);
li.QuadPart = -(::timeout * nTimerUnitsPerSecond);
SetWaitableTimer(hTimer, &li, ::timeout * 1000, NULL, NULL, FALSE);



Тут я конкретно не понимаю
1. смысла LARGE_INTEGER
2. конструкцию int timeout::timeout и что она значит.
3. li.QuadPart = -(::timeout * nTimerUnitsPerSecond); тоже самое
4. SetWaitableTimer(hTimer, &li, ::timeout * 1000, NULL, NULL, FALSE); то же самое

И ещё, если перейти к определению LARGE_INTEGER, то


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
typedef union _LARGE_INTEGER {
    __C89_NAMELESS struct {
      DWORD LowPart;
      LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
      DWORD LowPart;
      LONG HighPart;
    } u;
    LONGLONG QuadPart;
  } LARGE_INTEGER;



то как читать/понимать такую конструкцию?

Спасибо.
...
Рейтинг: 0 / 0
05.04.2014, 10:25
    #38605994
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает приведенный код. Таймер ожидания
mr_virtus,

понял, что параметр:

LARGE_INTEGER - нужен, чтоб установить время старта таймера. Причем можно задавать как абсолютное время, так и относительное.
Относительное задается в интервалах по 100нс.

Третий параметр в SetWaitableTimer(hTimer, &li, ::timeout * 1000, NULL, NULL, FALSE); обозначает как часто таймер будет переходить в свободное состояние в мс.

Переделал немного код:

Код: plaintext
1.
2.
3.
4.
5.
6.
 //int timeout::timeout;
    HANDLE hTimer = CreateWaitableTimer(0, FALSE, 0);
    //li.QuadPart = -(::timeout * nTimerUnitsPerSecond);
    li.QuadPart = -(2 * nTimerUnitsPerSecond);
    //SetWaitableTimer(hTimer, &li, ::timeout * 1000, NULL, NULL, FALSE);
    SetWaitableTimer(hTimer, &li, 1000, NULL, NULL, FALSE);



Теперь у меня таймер запуститься через 2 секунды и будет переходить в свободное состояние через 1 секунду.

Но такие конструкции я так и не понял пока:

Код: plaintext
1.
int timeout::timeout;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
typedef union _LARGE_INTEGER {
    __C89_NAMELESS struct {
      DWORD LowPart;
      LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
      DWORD LowPart;
      LONG HighPart;
    } u;
    LONGLONG QuadPart;
  } LARGE_INTEGER;
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как работает приведенный код. Таймер ожидания / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]