【问题标题】:Win32 function for scheduled tasks in C++C++ 中用于计划任务的 Win32 函数
【发布时间】:2009-05-21 17:31:52
【问题描述】:

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

谢谢,

朱利安

【问题讨论】:

    标签: c++ multithreading winapi


    【解决方案1】:

    SetTimer 怎么样。

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

    【讨论】:

      【解决方案2】:

      顺便说一句,我希望您不要在代码中做一些可以通过操作系统完成的事情。 (我不太了解您的要求,但我想我会指出来)。

      诸如任务调度器(windows)之类的东西是为调度重复性任务而设计的,它们通常比手动解决方案做得更好。

      【讨论】:

        【解决方案3】:

        设置定时器!

        一个例子:

          #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;
          }
        

        【讨论】:

        • 如何执行回调并将值传递给回调?示例:void CALLBACK schedule_task_1 (HWND hwnd, UINT msg, UINT id, DWORD time, int my_number) {..}; ?
        猜你喜欢
        • 2010-12-08
        • 1970-01-01
        • 2016-07-13
        • 1970-01-01
        • 2023-03-19
        • 2012-03-08
        • 1970-01-01
        • 2014-05-22
        • 2017-01-10
        相关资源
        最近更新 更多