c# 关于系统睡眠唤醒的问题

Thread_ 2018-05-19 03:14:19
目的:系统自动睡眠后n时间后自动醒来,推出睡眠/休眠状态。
实现:系统进入睡眠后用定时器唤醒。
注意:是Windows进入睡眠之后唤醒系统的方式,不是线程sleep...
遇到的问题:调用SetWaitForWakeUpTime()可以实现 自动睡眠后自动唤醒。但是在我设置30秒后唤醒之后运行结果是在进入睡眠状态后50秒才被唤醒... 所以请教一下各位这个问题处在哪里?
或者还有其他唤醒方式谢谢您告诉我,谢啦~

[DllImport("kernel32.dll")]
public static extern SafeWaitHandle CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWaitableTimer(SafeWaitHandle hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);

private void SetWaitForWakeUpTime()
{
long duetime = DateTime.Now.AddSeconds(30).ToFileTime(); //计划当前时间30秒后定时器发出信号。
using (SafeWaitHandle handle = CreateWaitableTimer(IntPtr.Zero, true, "Waitabletimer"))
{
if (SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true))
{
using (EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset))
{
wh.SafeWaitHandle = handle;
Application.SetSuspendState(PowerState.Suspend, true,false);
wh.WaitOne();
}
}
else
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
...全文
1144 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanta 2018-09-08
  • 打赏
  • 举报
回复
我猜测,系统唤醒还有些工作要做,所以会有些延后。提前唤醒一会,然后自己判断下时间就可以了,能用休眠,时间应该不短吧。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧