Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115

Таймер WinAPi

22.03.2019, 14:30. Показов 3134. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не работает таймер.По заданное время должна сработать музыка, то есть имитация будильника.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "pch.h"
#include <iostream>
#include <windows.h>
using std::cout;
using std::cin;
#pragma comment(lib,"Winmm.lib")
void playMusic();
 
int main()
{
    setlocale(LC_ALL, "Russian");
    HANDLE hTimer;
    SYSTEMTIME st;
    FILETIME ftLocal, ftUTC;
    LARGE_INTEGER liUTC;
    hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
    st.wYear = 2019; 
    st.wMonth = 3; 
    st.wDayOfWeek = 0; 
    st.wDay = 22; 
    st.wHour = 14; 
    st.wMinute = 28; 
    st.wSecond = 0;
    st.wMilliseconds = 0; 
    SystemTimeToFileTime(&st, &ftLocal);
    LocalFileTimeToFileTime(&ftLocal, &ftUTC);
    liUTC.LowPart = ftUTC.dwLowDateTime;
    liUTC.HighPart = ftUTC.dwHighDateTime;
    SetWaitableTimer(hTimer, &liUTC, 1, NULL, playMusic , FALSE);
    
}
void playMusic() 
{
    mciSendString(LR"(play будильник.mp3)", NULL, 0, NULL);
    
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2019, 14:30
Ответы с готовыми решениями:

Таймер в winapi с++
Задание Л« 4.12 Написать игру. Задано игровое поле размером 20x25 знакомест (см. рис.). В нижней части поля находится ракета, которая...

Таймер в WinApi или вызов функций по таймеру
Здравствуйте. Возникла необходимость нарисовать в окне составной график. Однако есть небольшое но: каждый элемент графика должен...

Ожидаемый Таймер C++ WINAPI (Вывод сообщения,перезагрузка)
Приветствую форумучан. Хочу понять как работают &quot;Ожидаемые Таймеры&quot; - читал,перерыл пол инета.Но до конца я так и не пойму. ...

7
33 / 26 / 7
Регистрация: 06.03.2019
Сообщений: 76
22.03.2019, 16:17
Лучший ответ Сообщение было отмечено artur31154 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <windows.h>
#pragma comment(lib,"Winmm.lib")
void CALLBACK playMusic(LPVOID, DWORD, DWORD);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    HANDLE hTimer;
    SYSTEMTIME st;
    FILETIME ftLocal, ftUTC;
    LARGE_INTEGER liUTC;
    hTimer=CreateWaitableTimer(NULL, FALSE, L"Budilnik");
    if(!hTimer) {
        printf("\nCannot CreateWaitableTimer\n");
        return EXIT_FAILURE;
    }
    st.wYear = 2019; 
    st.wMonth = 3; 
    st.wDayOfWeek = 0; 
    st.wDay = 22; 
    st.wHour = 14; 
    st.wMinute = 28; 
    st.wSecond = 0;
    st.wMilliseconds = 0; 
    SystemTimeToFileTime(&st, &ftLocal);
    LocalFileTimeToFileTime(&ftLocal, &ftUTC);
    liUTC.LowPart = ftUTC.dwLowDateTime;
    liUTC.HighPart = ftUTC.dwHighDateTime;
    if(SetWaitableTimer(hTimer, &liUTC, 1000, playMusic, NULL, FALSE)) {
        SleepEx(INFINITE, TRUE);
        printf("\nБудильник: время вышло\nДля выхода нажмите Esc(ape)\n");
        MSG msg;
        while(!GetAsyncKeyState(VK_ESCAPE)) {
            if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
                TranslateMessage(&msg);     
                DispatchMessage(&msg);
            }
        }
        CloseHandle(hTimer);
    }
    else
        printf("\nCannot SetWaitableTimer\n");
 
    return EXIT_SUCCESS;
}
 
VOID CALLBACK playMusic(LPVOID lpArg, DWORD dwVal, DWORD dwVal2)
{
    mciSendString(L"play будильник.mp3", NULL, 0, NULL);
}
1
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 115
22.03.2019, 16:48  [ТС]
ahtak, спасибо!Работает
0
 Аватар для Argus19
1429 / 446 / 78
Регистрация: 24.09.2017
Сообщений: 2,531
Записей в блоге: 23
31.08.2019, 14:23
Создаю пустой проект, добавляю в папку "Файлы исходного кода" файл "timer.cpp" с кодом, приведённым выше.
Получаю ошибку:
timer.cpp(13): error C2664: CreateWaitableTimerA: невозможно преобразовать параметр 3 из "const wchar_t [9]" в "LPCSTR"
и то же в строке 50.
Убираю символ "L" в обеих строках, т.к. он подчёркнут.
Всё компилируется и работает, кроме проигрывания музыки. В папку "Release" положил файл .mp3, прописал его имя в строке 50.
Что я не так делаю?
0
15 / 13 / 3
Регистрация: 14.05.2019
Сообщений: 64
31.08.2019, 16:20
Argus19, скорее всего, ваш проект, свойства - имеет: "Многобайтовая кодировка",
здесь нужна "UNICODE". Измените. Менять нужно для двух версий, Release и Debug.

Или так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <windows.h>
#pragma comment(lib,"Winmm.lib")
void CALLBACK playMusic(LPVOID, DWORD, DWORD);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    HANDLE hTimer;
    SYSTEMTIME st;
    FILETIME ftLocal, ftUTC;
    LARGE_INTEGER liUTC;
 
#ifdef UNICODE
    hTimer=CreateWaitableTimer(NULL, FALSE, L"Budilnik");
#else
    hTimer=CreateWaitableTimerA(NULL, FALSE, "Budilnik");
#endif
 
    if(!hTimer) {
        printf("\nCannot CreateWaitableTimer\n");
        return EXIT_FAILURE;
    }
    st.wYear = 2019; 
    st.wMonth = 3; 
    st.wDayOfWeek = 0; 
    st.wDay = 22; 
    st.wHour = 14; 
    st.wMinute = 28; 
    st.wSecond = 0;
    st.wMilliseconds = 0; 
    SystemTimeToFileTime(&st, &ftLocal);
    LocalFileTimeToFileTime(&ftLocal, &ftUTC);
    liUTC.LowPart = ftUTC.dwLowDateTime;
    liUTC.HighPart = ftUTC.dwHighDateTime;
    if(SetWaitableTimer(hTimer, &liUTC, 1000, playMusic, NULL, FALSE)) {
        SleepEx(INFINITE, TRUE);
        printf("\nБудильник: время вышло\nДля выхода нажмите Esc(ape)\n");
        MSG msg;
        while(!GetAsyncKeyState(VK_ESCAPE)) {
            if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
                TranslateMessage(&msg);     
                DispatchMessage(&msg);
            }
        }
        CloseHandle(hTimer);
    }
    else
        printf("\nCannot SetWaitableTimer\n");
 
    return EXIT_SUCCESS;
}
 
VOID CALLBACK playMusic(LPVOID lpArg, DWORD dwVal, DWORD dwVal2)
{
#ifdef UNICODE
    mciSendString(L"play будильник.mp3", NULL, 0, NULL);
#else
    mciSendStringA("play будильник.mp3", NULL, 0, NULL);
#endif
}
1
 Аватар для Argus19
1429 / 446 / 78
Регистрация: 24.09.2017
Сообщений: 2,531
Записей в блоге: 23
31.08.2019, 17:30
Цитата Сообщение от osnu Посмотреть сообщение
проект, свойства - имеет: "Многобайтовая кодировка"
Да. Поменял.
Сколько хитростей
mp3 -файл всё-равно не проигрывается. Может надо прописать полный путь к нему?

Добавлено через 7 минут
Прописал полный путь к mp3-файлу. Не помогло.
0
15 / 13 / 3
Регистрация: 14.05.2019
Сообщений: 64
31.08.2019, 19:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Играет MP3
 
#include <iostream>
#include <windows.h>
#pragma comment(lib,"Winmm.lib")
 
int main()
{
    BOOL bRunning=FALSE;
    MSG msg;
    while(!GetAsyncKeyState(VK_ESCAPE))
    {
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        if(!bRunning)
        {
            bRunning=TRUE;
            #ifdef UNICODE
                mciSendString(L"play будильник.mp3", NULL, 0, NULL);
            #else
                mciSendStringA("play будильник.mp3", NULL, 0, NULL);
            #endif
        }
        Sleep(20);
    }
    return 0;
}
1
 Аватар для Argus19
1429 / 446 / 78
Регистрация: 24.09.2017
Сообщений: 2,531
Записей в блоге: 23
31.08.2019, 19:43
Разобрался. Удаляя имя файла для замены, удалял команду "play".
Простая невнимательность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2019, 19:43
Помогаю со студенческими работами здесь

Как обновлять картинку в WinAPI чаще, чем срабатывает таймер?
У меня таймер срабатывает каждые 200 ms (5 раз в секунду). Как, не загружая ядро процессора на много %, перерисовывать элемент картинки...

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я хочу включать и выключать таймер за счет...

Таймер не запускается из WinAPI потока
Хочу сделать фейерверк. При нажатии мыши фейерверк должен запускаться, потом рекурсивно разветвляться несколько раз... Но суть не в этом......

Создать таймер (WinAPI) так, чтобы он сам себя уничтожил
Нужно создать таймер так чтобы он сам себя уничтожил. основная програма: var Timer:WODR; begin Timer := SetTimer(0, 0, 15...

Таймер должен через время положить файл на БД. [Таймер]
Мне нужен таймер, а я не знаю как его делать именно, чтоб в конкретное время он сохранял информацию в файл. Чтобы он в конкретный период...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru