信号中断消息队列原语和系统调用

时间:2013-04-18 09:09:14

标签: linux qt operating-system signals message-queue

我有一个Qt程序,其中包含:

  1. 许多Qt signal-slot对,用于实现一些套接字编程。
  2. 系统调用执行某些文件操作
  3. 一些Posix消息队列代码,其中,进程等待将某些消息写入队列,读取并处理。
  4. 我面临两个问题:

    我。 有时,当进程在队列上等待读取某些消息时,函数mq_receive根据文档返回的值转换为消息Interrupted system call

    II。 有时,当进程使用系统调用执行文件操作时,应用程序崩溃。

    现在我读了here如何使用TEMP_FAILURE_RETRY宏来重试失败的呼叫。

    Q1。我的两个问题背后的问题可能与我使用Qt信号/插槽机制的原因相同吗?

    Q2。如果是这样,TEMP_FAILURE_RETRY是处理此类情况的唯一好/标准方法吗?还是Qt提供了一些其他方法呢?

    Q3。 Qt生成的信号是否会导致其他原语出现问题?为什么它只发生在消息队列和系统调用而不是其他C ++原语?

    有人可以发布指向某篇文章/书籍的链接,在那里我可以理解信号/例程/系统调用如何以及为什么会导致彼此出现问题?我无法弄清楚我将使用谷歌搜索/叮叮当当的关键词?

1 个答案:

答案 0 :(得分:0)

尝试调查thisthis。也许,使用QThread而不是POSIX消息传递是有意义的,或者使用链接Qt Local sockets之一建议。 在所有这些之前,您可以在Qt GUI和QThreads中阅读有关事件循环的信息。