在做一个如标题的程序,参考了Windows的API感觉有可行性,通过SetSuspendState 函数让系统睡眠,https://learn.microsoft.com/zh-cn/windows/win32/api/powrprof/nf-powrprof-setsuspendstate
然后参考Windows的API的系统唤醒事件https://learn.microsoft.com/zh-cn/windows/win32/power/system-wake-up-events
编写了如下程序,然而在系统睡眠后程序也不跑手动唤醒后才继续执行,有什么解决方法?
看Windows的文档应该是支持唤醒的,如图:
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <powrprof.h>
#include <time.h>
#include <iostream>
#pragma comment(lib, "PowrProf.lib")
void Time()
{
time_t timep;
time(&timep);
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S", localtime(&timep));
std::cout << "currentTime is " << tmp << "." << std::endl;
}
int main()
{
// 创建一个可等待的计时器对象
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (hTimer == NULL)
{
printf("CreateWaitableTimer failed (%d)\n", GetLastError());
return 1;
}
else {
std::cout << "CreateWaitableTimer ";
Time();
}
// 设置计时器为10秒后触发,并指定系统应唤醒
LARGE_INTEGER liDueTime;
liDueTime.QuadPart = -100000000LL; // 10秒
if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, TRUE))
{
printf("SetWaitableTimer failed (%d)\n", GetLastError());
return 2;
}
else
{
std::cout << "SetWaitableTimer ";
Time();
}
// 让系统进入睡眠状态
std::cout << "SetSuspendState ";
Time();
SetSuspendState(FALSE, FALSE, FALSE);
// 等待计时器信号
if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
{
printf("WaitForSingleObject failed (%d)\n", GetLastError());
return 3;
}
else
{
std::cout << "WaitForSingleObjectl ";
Time();
}
// 关闭计时器对象
CloseHandle(hTimer);
std::cout << "woken up ";
Time();
printf("The system has been woken up.\n");
system("pause");
return 0;
}
AI生成的请先验证能够正常使用,我这边尝试过GPT,newBing几个不同的AI均不能够实现目的。拒绝直接复制AI的答案。