2017-08-08 96 views
2

继执行睡眠状态S1是代码把系统处于睡眠状态S3,我正在寻找一种方式来进行睡眠状态S1如何使用WINAPI(C++)

bool PerformS3() { 
    int wait = 100; 
    LARGE_INTEGER WaitTime; 
    WaitTime.QuadPart = wait; 
    WaitTime.QuadPart *= -10000000; 

    HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL); 
    if(0 == SetWaitableTimer(hTimer, &WaitTime, 0, NULL, NULL, TRUE)) 
    { 
     return false; 
    } 

    if(0 == SetSuspendState(FALSE, FALSE, FALSE)) 
    { 
     return false; 
    } 
    return true; 
} 
+0

你可以在https://msdn.microsoft.com/en-us/library/windows/desktop/aa373229(v=vs.85).aspx找到说明。 –

回答

1

简短的回答:在Windows中,没有S1或S3,只有“睡眠模式”。它的实现取决于许多因素,并且是硬件和软件特定的。您只能在某种程度上通过重新配置控制面板和BIOS设置中的电源设置来更改该设置。


当你的文章链接,System Power States (Windows),提示,Windows电源管理不公开ACPI电源状态,而是使用它自己的状态。一个更明确的声明是在Standby Explained (S1, S3) – Omar Shahine – MSDN Blogs

这些映射到ACPI的方式取决于主板功能,驱动程序功能和系统/ BIOS设置。

特别是,睡眠模式用于映射到S1或S3(取决于BIOS设置),而较新版本的Windows也可以使用“混合睡眠”或“离开模式”。

根据Which sleep mode should I use? S1 or S3? - Tom's Hardware和我的个人经验,S1/S3开关具体是BIOS设置选项或主板上的跳线。

从你的问题公式来看,你可能会对“离开模式”很好。