2009-05-21 7 views

ответ

5

Как насчет SetTimer.

  1. Создайте функцию обертки для использования в качестве обратного вызова для заданного таймера.
  2. Функция Wrapper вызывает вашу функцию.
  3. После завершения функции функция обертки снова вызывает SetTimer, чтобы повторно установить таймер.
1

Как примечание, я надеюсь, что вы не делаете что-то в коде, которое может быть выполнено через ОС. (Я не знаю достаточно о ваших требованиях, чтобы сказать, но я думал, что хочу указать на это).

Такие задачи, как планировщик задач (окна), предназначены для планирования повторяющихся задач, и они часто выполняют лучшую работу, чем ручные решения.

0

SetTimer!

Пример:

#include <windows.h> 
    #include <stdio.h> 

    void CALLBACK scheduled_task_1 (HWND hwnd, UINT msg, UINT id, DWORD time) 
    { 
     puts("Executing scheduled_task_1 every half-second event"); 
    } 

    void CALLBACK scheduled_task_2 (HWND hwnd, UINT msg, UINT id, DWORD time) 
    { 
     puts("Executing scheduled_task_2 every two seconds event"); 
    } 

    void CALLBACK scheduled_task_3 (HWND hwnd, UINT msg, UINT id, DWORD time) 
    { 
     puts("Executing scheduled_task_3 24 hours event"); 

    } 

    void messageLoop(void) { 
    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0) > 0) 
     DispatchMessage(&msg); 
    } 

    int main(void) 
    { 
    while(true) 
    { 
     SetTimer (NULL, 0, 500, scheduled_task_1); /* every half-second */ 
     SetTimer (NULL, 0, 2000, scheduled_task_2); /* every two seconds */ 
     SetTimer (NULL, 0, 60*60*24*1000, scheduled_task_3); /* after 24 hours or 86400000 milliseconds */ 
     messageLoop(); 
    } 
    return 0; 
    } 
+0

Как я могу выполнить обратный вызов и передавать значения обратного вызова? Пример: void CALLBACK schedule_task_1 (HWND hwnd, UINT msg, UINT id, DWORD time, int my_number) {..}; ? – programmer