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

Posted

技术标签:

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

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

谢谢,

朱利安

【问题讨论】:

【参考方案1】:

SetTimer 怎么样。

    创建一个包装函数以用作设置计时器的回调。 包装函数调用您的函数。 函数完成后,包装函数再次调用 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) ..; ?

以上是关于C++ 中用于计划任务的 Win32 函数的主要内容,如果未能解决你的问题,请参考以下文章

Atitit.木马病毒自动启动-------------win7计划任务的管理

关于win10 自动更新的问题,计划任务无法修改能不能直接删除文件来停止更新

freefilesync的批处理文件 在win7下如何设置 计划任务

怎么样启动计划任务让电脑定时关机

如何在Oracle中管理计划任务

win7 任务计划 任务映像已损坏或篡改(异常来自HRESULT:0x80041321)