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 自动更新的问题,计划任务无法修改能不能直接删除文件来停止更新