Winapi 调用Sleep的程序不';t wakup关于信号
在Linux中,当调用“sleep”的执行线程暂停其执行时。一旦向进程发送信号,“sleep”函数立即返回。我可以安装我的信号处理程序并正确设置下面的标志以退出while循环Winapi 调用Sleep的程序不';t wakup关于信号,winapi,Winapi,在Linux中,当调用“sleep”的执行线程暂停其执行时。一旦向进程发送信号,“sleep”函数立即返回。我可以安装我的信号处理程序并正确设置下面的标志以退出while循环 // a signal handler set 'flag' on CTRL-C while(flag) { sleep(10); // returns on signal caught } 在窗户里我看不到。我正在使用“睡眠(DWORD毫秒)”,并且我已经使用“信号”函数安装了我的信号处理程序。实际上,睡眠线程
// a signal handler set 'flag' on CTRL-C
while(flag) {
sleep(10); // returns on signal caught
}
在窗户里我看不到。我正在使用“睡眠(DWORD毫秒)”,并且我已经使用“信号”函数安装了我的信号处理程序。实际上,睡眠线程只在“睡眠”结束时恢复
在交代码之前,我必须做什么才能让“睡眠”返回?
我使用的是正确的方法(使用标志退出while循环)还是必须查看其他内容?您应该使用
将循环替换为对的调用,并调用control-C处理程序
(当然,在实践中,你不太可能真的希望你的程序在用户按下control-C之前袖手旁观,什么也不做。但这就是问题所呈现的场景,这个答案为你提供了一个更现实场景的起点。)我甚至不知道WIndows有*nix样式的信号:(…不,无论您在做什么,轮询标志都不是正确的方法。它浪费CPU并增加了可避免的延迟(在您的情况下,平均为5毫秒).Windows有大量synchro对象。信号量等待几乎肯定会起作用。此外,该标志需要是易变的。忘记该标志,在Windows synchro上阅读并正确执行:)使用bAlertable=TRUE,并在插入APC时返回函数。如果使用
ZwDelayExecution
direct(此api和调用Sleep[Ex]
)您还可以通过警报来中断等待-ZwAlertThread
一旦停止调用sleep,事情就会好转