QSystemSemaphore :: acquire()abort

时间:2016-11-08 13:45:30

标签: c++ linux multithreading qt semaphore

我使用QSharedMemory和QSystemSemaphore来组织多个进程之间的事件交换。 QSharedMemory存储接收器和事件数据的数量。接收者正在等待QSystemSemaphore :: acquire()。发件人通过QSystemSemaphore :: release([接收者数量])通知他们。

有没有办法优雅地终止接收者流程,除了引入flag" real" /" fake"在共享内存和随后的生成"假"终止过程中的事件?

1 个答案:

答案 0 :(得分:2)

width适用于每个平台,无论线程目前正在做什么。当然,当您在应用程序中终止任何线程时,您可以安全地执行的唯一其他操作是调用QThread::terminate():此时进程通常处于损坏状态。在您致电abort后,不要执行abort()以外的任何操作。由于它具有破坏性,你可以放弃调用QThread::terminate并直接中止。

您的问题的措辞是,如果您计划在致电terminate后继续使用该应用程序。你一定不能!

唉,如果你想要一个线程退出,信号量是同步原语,你可以通过设置一个标志并释放信号量来轻松完成。下面是一个有点人为的例子,因为你通常不会这样使用线程池:它只是为了缩短代码。

terminate