Win32函数用于C ++中的计划任务

时间:2009-05-21 17:31:52

标签: c++ multithreading winapi

我有一个C ++函数,需要在一段时间后调用,然后重复这个任务。你知道Win32或pthread中的任何内置函数或示例代码吗?

谢谢,

儒略

3 个答案:

答案 0 :(得分:5)

SetTimer怎么样?

  1. 创建一个包装函数,用作set timer的回调函数。
  2. Wrapper函数调用您的函数。
  3. 函数完成后,包装函数再次调用SetTimer来重新设置计时器。

答案 1 :(得分:1)

正如旁注,我希望你没有在代码中做一些可以通过操作系统完成的事情。 (我不太了解你的要求,但我想我已经指出了。)

诸如任务调度程序(Windows)之类的东西是用于安排重复任务的,并且它们通常比手动解决方案做得更好。

答案 2 :(得分: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;
  }