Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2009, 09:30   #1
liosha
 
Регистрация: 25.10.2009
Сообщений: 3
По умолчанию Помогите с таймерами C++

Задание звучит так:
"Напишите «Будильник», который в заданное время «пробуждает»
компьютер и проигрывает небольшой файл. Для «Пробуждения»
компьютера внимательно прочитайте в MSDN описание параметра
fResume функции SetWaitableTimer."

О параметре fResume начитался, но проблема в самих функциях CreateWaitableTimer, OpenWaitableTimer, CloseWaitableTimer и SetWaitableTimer. Особенно с последней. Никак не пойму как ей время задавать. Вроде ставлю время, конвертирую, передаю, функция возвращает 1(вроде ж запустился таймер), но функция, которую я ей передаю никогда не вызывается.
Предпологаю что просто неправильно передаю время, пересмотрел кучу примеров...
Может у кого примерчик завалялся, как сделать чтоб переданная в SetWaitableTimer функция запустилась допустим через десять секунд от текущего времени.
Надеюсь на Вашу помощ.
liosha вне форума Ответить с цитированием
Старый 25.10.2009, 10:44   #2
liosha
 
Регистрация: 25.10.2009
Сообщений: 3
По умолчанию

Вобщем решил проблему таким способом. Создаю поток. В функции потока:

Код:
DWORD WINAPI ThreadFunc(LPVOID lpPar)
{ 
    HANDLE hTimer;
    LARGE_INTEGER delay;
    delay.QuadPart = -30000000;//3 sec
    hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
    SetWaitableTimer(hTimer, &delay, 2, 0, NULL, 1);
    WaitForSingleObject(hTimer, INFINITE);
    MessageBox(0, TEXT("Звоним"), 0, 0);
    CancelWaitableTimer(hTimer);
    CloseHandle(hTimer);
    return 0;
}
Создаю таймер, Устанавливаю паузу в 3 секунды и жду завершения этой паузы с помощью функции WaitForSingleObject (Которую я к стати раньше не использовал).
Таким образом поток засыпает на 3 секунды, после чего показывается сообщение.
Как я понял, проблема в том, что функция, переданная в SetWaitableTimer срабатывает только в определённых условиях.
Я эти условия так и не смог воссоздать.
Надеюсь эта тема кому-то поможет.
Всем спасибо за помощ. :D

Последний раз редактировалось rpy3uH; 25.10.2009 в 16:50.
liosha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с таймерами Mr. Demetrius JavaScript, Ajax 7 16.03.2008 22:29