在系统中定义一个变量bHiberable,如果是3分钟内休眠,那么每隔3分钟检测一次这个变量,如果为真,则进入睡眠,如果是假,就把这个标志设置为真。继续等待和检测。 |
程序阻止操作系统休眠的办法:操作系统系统对外提供API,程序每调用一次API,就将bHiberable标志设置为假,可以阻止系统的休眠。 |
为了避免和我一样的人的误解,这是我想出来的操作系统睡眠机制。真正阻止Windows系统睡眠使用到windows.h的SetThreadExecutionState 系统API,并且我不知道真正的windows系统的睡眠机制。
一个系统类实现睡眠功能
class System{
public:
System(){
iWaitTimeMS = 3000;
}
static void do_not_hibernate(){
bHiberable = false;
}
void start(){
thread t(&System::try_hibernate, this);
t.detach();
}
void try_hibernate(){
while(1){
this_thread::sleep_for(std::chrono::milliseconds(iWaitTimeMS));
cout<<"System:尝试睡眠:";
if(bHiberable){
cout<<"进入睡眠状态。"<<endl;
break;
}else{
cout<<"不能睡眠。"<<endl;
bHiberable = true;
}
}
}
static bool bHiberable;
private:
int iWaitTimeMS;
};
bool System::bHiberable = true;
程序类会在运行期间阻止系统睡眠
class Program123{
public:
void run(){
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
}
};
完整代码
#include <iostream>
#include <thread>
using namespace std;
class System{
public:
System(){
iWaitTimeMS = 3000;
}
static void do_not_hibernate(){
bHiberable = false;
}
void start(){
thread t(&System::try_hibernate, this);
t.detach();
}
void try_hibernate(){
while(1){
this_thread::sleep_for(std::chrono::milliseconds(iWaitTimeMS));
cout<<"System:尝试睡眠:";
if(bHiberable){
cout<<"进入睡眠状态。"<<endl;
break;
}else{
cout<<"不能睡眠。"<<endl;
bHiberable = true;
}
}
}
static bool bHiberable;
private:
int iWaitTimeMS;
};
bool System::bHiberable = true;
class Program123{
public:
void run(){
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
this_thread::sleep_for(std::chrono::milliseconds(2000));
cout<<"Program:阻止系统睡眠。"<<endl;
System::do_not_hibernate();
}
};
int main(){
System s;
s.start();
Program123 p123;
p123.run();
cin.get();
return 0;
}
运行测试