【问题标题】:Signals interrupting the message queue primitives and system calls中断消息队列原语和系统调用的信号
【发布时间】:2013-04-11 07:44:22
【问题描述】:

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

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

我面临两个问题:

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

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

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

第一季度。我的两个问题背后的问题是否与我使用 Qt 信号/插槽机制的原因相同?

第二季度。如果是这样,TEMP_FAILURE_RETRY 是处理这种情况的唯一好/标准方法吗?还是 Qt 提供了其他方法?

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

有人可以发布一些文章/书籍的链接,我可以在其中了解信号/例程/系统调用如何以及为什么会导致彼此出现问题?我不知道我应该搜索/搜索哪些确切的关键字?

【问题讨论】:

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


    【解决方案1】:

    尝试调查this 和this。也许,使用 QThread 而不是 POSIX 消息传递是有意义的,或者如链接 Qt Local sockets 之一所建议的那样。 在所有这些之前,最好先了解一下 Qt GUI 和 QThreads 中的事件循环。

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2012-09-22
      • 2010-12-13
      • 2011-06-24
      相关资源
      最近更新 更多