【问题标题】:Windows: Preventing sleep mode - minimal version in CWindows:防止睡眠模式 - C 中的最小版本
【发布时间】:2012-07-16 06:30:33
【问题描述】:

我想在 Windows 下拥有一个最简单的 C 程序版本,它可以防止操作系统在运行时进入睡眠模式或休眠模式。目前我有这个:

#include <windows.h>

int main(int argc, char **argv)
{
    while (1)
    {
        SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
        Sleep(300*1000); /* wait 300 seconds */
    }
    return 0;
}

但是,这不起作用 - 如果我尝试使用 Orwell Dev-C++ 5.2.0.3 编译它,我会收到以下错误:

[链接器错误] C:\Users\bachmann\AppData\Local\Temp\ccD8l1tp.o:disable_sleep.c:(.text+0x1e): undefined reference to `SetThreadExecutionState' collect2: ld 返回 1 个退出状态

那怎么了?根据MSDN,我认为这应该可行。

【问题讨论】:

  • 好吧,在 'SetThreadExecutionState' 的 'windows.h' 文件中是什么意思?

标签: c windows dev-c++


【解决方案1】:

这是一个链接器错误:你需要链接kernel32.lib。从问题中链接的页面:

要求 支持的最低客户端|Windows XP 支持的最低服务器|Windows Server 2003 标头|Winbase.h(包括 Windows.h) 库|Kernel32.lib

【讨论】:

  • 我在 Dev-C++ 中的项目选项、参数、链接器下添加了 kernel32.lib(来自 Windows SDK)。但是,这似乎还不够: [链接器错误] main.o:main.c:(.text+0x1e): undefined reference to `SetThreadExecutionState' collect2: ld returned 1 exit status C:\Users\bachmann\ Desktop\dev-c++\Makefile.win [Error] [NoSleep.exe] 错误 1(如果这是唯一的错误:请检查您的库包含)
  • @André,我不使用 IDE,所以我不确定您所做的更改是否正确。但是SetThreadExecutionState()肯定在 kernel32 中实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多