C++ SIGUSR2和睡眠的陌生感(嵌入Qt 4)

C++ SIGUSR2和睡眠的陌生感(嵌入Qt 4),c++,qt,C++,Qt,一个非常奇怪的问题是:我有一个运行在帧缓冲区上的Qt4嵌入式应用程序,它通常从inittab作为盒子上唯一的UI运行。有一个选项可以让机器进入睡眠状态——我做正常的事情,打开/sys/power/state,写入“mem”并关闭它(使用QFile)。非常直截了当,除了启动后第一次运行应用程序外,它工作正常。如果它睡着了,那么它会收到SIGUSR2信号,并在一个空白屏幕上永远挂起。挂起发生在恢复后 但是,如果我手动杀死它并再次运行。。睡眠又恢复正常了。请注意,它必须执行失败的睡眠尝试并被杀死——在

一个非常奇怪的问题是:我有一个运行在帧缓冲区上的Qt4嵌入式应用程序,它通常从inittab作为盒子上唯一的UI运行。有一个选项可以让机器进入睡眠状态——我做正常的事情,打开/sys/power/state,写入“mem”并关闭它(使用QFile)。非常直截了当,除了启动后第一次运行应用程序外,它工作正常。如果它睡着了,那么它会收到SIGUSR2信号,并在一个空白屏幕上永远挂起。挂起发生在恢复后

但是,如果我手动杀死它并再次运行。。睡眠又恢复正常了。请注意,它必须执行失败的睡眠尝试并被杀死——在每次运行都很顺利之后,SIGUSR2再也不会出现

我已经试过捕捉信号了——不捕捉。不知道为什么-除了我知道pthreads使用SIGUSR2

难倒了。思想?线索

[编辑]我发现,如果我fork()并在子对象中写入/sys/power/state并退出它,某种程度上解决了问题,但这并不能解决问题

[编辑2]我随后发现,事实上,当机器关闭时,孩子仍然挂起(导致它永远挂起,而不关闭..),虽然刚才提到的丑陋的黑客确实修复了挂起带来的挂起-我还没有弄清楚发生了什么,但最终通过使用脚本/守护程序解决了它:在一个while循环中,它检查/tmp中的一个文件是否有操作,然后停止或挂起并重新启动应用程序。。虽然不漂亮,但很管用

而西格斯2号的神秘之处依然存在