我使用QSharedMemory和QSystemSemaphore来组织多个进程之间的事件交换。 QSharedMemory存储接收器和事件数据的数量。接收者正在等待QSystemSemaphore :: acquire()。发件人通过QSystemSemaphore :: release([接收者数量])通知他们。
有没有办法优雅地终止接收者流程,除了引入flag" real" /" fake"在共享内存和随后的生成"假"终止过程中的事件?
答案 0 :(得分:2)
width
适用于每个平台,无论线程目前正在做什么。当然,当您在应用程序中终止任何线程时,您可以安全地执行的唯一其他操作是调用QThread::terminate()
:此时进程通常处于损坏状态。在您致电abort
后,不要执行abort()
以外的任何操作。由于它具有破坏性,你可以放弃调用QThread::terminate
并直接中止。
您的问题的措辞是,如果您计划在致电terminate
后继续使用该应用程序。你一定不能!
唉,如果你想要一个线程退出,信号量是同步原语,你可以通过设置一个标志并释放信号量来轻松完成。下面是一个有点人为的例子,因为你通常不会这样使用线程池:它只是为了缩短代码。
terminate