关于可等待的计时器,我有些不明白。我在网上搜索并阅读了 MSDN 上的规范以及我在 stackoverflow 上可以找到的任何内容(例如link),但是我的计时器在 PC 挂起后几乎立即触发。
为了解决这个问题,我在 Windows 7 中使用 XE5(64 位)编写了一个小型测试应用程序,并尝试复制此处找到的项目:http : //www.codeproject.com/Articles/49798/Wake-the-PC-从待机或休眠
我以为问题是我推导时间的方式,但我似乎找不到问题所在。
测试应用程序看起来像这样(非常简单):

我声明线程类型如下
type
TWakeupThread = class(TThread)
private
FTime: LARGE_INTEGER;
protected
procedure Execute; override;
public
constructor Create(Time: LARGE_INTEGER);
end;
Run Code Online (Sandbox Code Playgroud)
...
constructor TWakeupThread.Create(Time: LARGE_INTEGER);
begin
inherited Create(False);
FreeOnTerminate:=True;
FTime:=Time;
end;
procedure TWakeupThread.Execute;
var
hTimer: THandle;
begin
// Create a waitable timer.
hTimer:=CreateWaitableTimer(nil, True, 'WakeupThread');
if (hTimer <> 0) then
begin
//CancelWaitableTimer(hTimer);
if (SetWaitableTimer(hTimer, FTime.QuadPart, 0, nil, nil, True)) then
begin
WaitForSingleObject(hTimer, INFINITE);
end; …Run Code Online (Sandbox Code Playgroud)