- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试唤醒我的电脑以防它进入休眠模式。我在某个网站上找到了这个代码片段,但我在最后添加的 Messagebox 总是立即返回。
我还在我的系统中启用了电源选项中的唤醒定时器。
[DllImport("kernel32.dll")]
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes,
bool bManualReset, string lpTimerName);
[DllImport("kernel32.dll")]
public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long
pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr
lpArgToCompletionRoutine, bool fResume);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
public static extern Int32 WaitForSingleObject(IntPtr handle, uint
milliseconds);
static IntPtr handle;
private void SetWaitForWakeUpTime()
{
long duetime = 1200000000;
handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer");
SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
uint INFINITE = 0xFFFFFFFF;
int ret = WaitForSingleObject(handle, INFINITE);
MessageBox.Show("wake up !");
}
我这样调用它:
private void buttonTest_Click(object sender, EventArgs e)
{
SetWaitForWakeUpTime();
}
理论上这应该只在 2 分钟后发出信号,对吧?为什么它会立即发出信号,我该如何更正它?
最佳答案
SetWaitableTimer() 可以在绝对时间和增量时间上触发。来自 MSDN 文章:
pDueTime [in]
The time after which the state of the timer is to be set to signaled, in 100 nanosecond intervals. Use the format described by the FILETIME structure. Positive values indicate absolute time. Be sure to use a UTC-based absolute time, as the system uses UTC-based time internally. Negative values indicate relative time. The actual timer accuracy depends on the capability of your hardware. For more information about UTC-based time, see System Time.
现在您使用了一个正值,所以您指定了 1600 年的日期,它总是立即完成。看起来您的实际意图是使用 2 分钟的间隔,因此您必须使用负值 -1200000000。
可能的真实意图是让它在时钟的特定时间醒来,给定使用场景,使用 DateTime.ToUniversalTime().ToFileTime()
关于c# - WaitForSingleObject 立即发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205316/
这个问题已经有答案了: Why those two different behaviors with WaitForSingleObject function in CPP (2 个回答) 已关闭 5
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
我正在尝试唤醒我的电脑以防它进入休眠模式。我在某个网站上找到了这个代码片段,但我在最后添加的 Messagebox 总是立即返回。 我还在我的系统中启用了电源选项中的唤醒定时器。 [DllImport
我有两个功能: Fl_Thread n_create_thread(Fl_Thread &t, void *(*f) (void *), void *p) { return t = (Fl_T
下面的简单代码并没有像我预期的那样运行。它创建一个线程(挂起),启动它,等待它运行 1 毫秒并循环等待直到线程死亡或失败。 我希望输出是这样的: Start Callback running Call
我阅读了有关使用 WaitForSingleObject() 的不同主题,但我仍然不明白为什么我不能让它工作。我有一个使用 AfxBeginThread 更新的进度条,我想在执行另一个进程之前等待完成
h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FI
在 WinAPI 下有 WaitForSingleObject() 和 ReleaseMutex() 函数对。还有 Interlocked*() 函数族。我决定检查捕获单个互斥锁和交换互锁变量之间的性
我做 WaitForSingleObject(handle, timeout);如果在调用 WaitForSingleObject 之前 handle 已经发出信号,函数将返回什么? 我认为它应该立即
我正在使用 waitForAll 参数 = true 的 WaitForMultipleObject 函数。这里使用一个 std::vector 的 handle 对象来等待。如果这个函数超时了,那么
一些背景如果你感兴趣,否则你可以直接转到底部的问题: 我遇到了一个问题,我有一个无限的 while 循环,其中有两个 if 条件检查两个事件对象状态是否变为有信号。 while(1) { if
下面是一段代码。代码不完整,我省略了释放资源部分和QueryRes逻辑的实现。 #define N 5 /*simply resources manager which has N shared re
过去几天我一直在尝试为一个应用程序寻找一个好的架构,经过一些研究我终于卡住了,原因是 COM。 有问题的应用程序将有多个 GUI 线程,它们将为工作线程安排工作项。工作线程将通过 CoInitiali
我正在用 C 编写一个 win32 程序。 当您有多个线程在运行,并且其中一个线程正在等待一个事件(例如使用 WaitForSingleObject())时,该线程是否仍然获得其完整的 CPU 时间片
如果我设置 3 个线程等待释放互斥锁,它们是根据请求的顺序形成一个队列,还是未定义的行为(即我们不知道哪个会先接收它) ? 最佳答案 它在 SDK article 中明确记录: If more tha
在等待超时时间为零的事件时,WaitForSingleObject(或WaitForMultipleObjects)会导致上下文切换吗? (据我所知,Sleep(0) 将立即产生一个线程时间片。) 现
为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 70
当您在使用 CreateFile() 或 _get_osfhandle() 创建的句柄上调用 WaitForSingleObject() 时会发生什么? 出于不值得解释的原因,我想使用 WaitFor
先仔细阅读问题。 有一个从 CTest 类的 CreateInstance 生成的工作线程。这是该类的原型(prototype)。 hThread 是线程句柄,hEventShutdown 是程序退出
我是一名优秀的程序员,十分优秀!