我有一个C ++ / Qt QThread工作线程,它将当前状态存储为ENUM(例如,工作,完成等值)。只有工作线程设置ENUM。
我需要能够从另一个线程(GUI线程)读取工作线程的状态,以在屏幕上显示是否正在进行工作。
在一个线程(worker)中读取/写入ENUM是否安全,并在其他线程中读取?否则,我应该在读/写的地方使用像QMutex这样的锁定吗?
答案 0 :(得分:1)
正如尼尔所说:是的,你需要锁定。对于您的用例,QReadWriteLock应该比QMutex更适合。
答案 1 :(得分:1)
更多Qt特定的方法是让工作线程在状态发生变化时发出信号及其状态。然后,GUI将连接到信号并更新工作线程状态所需的任何内容。如果执行此操作并按值传递状态,则不需要对状态进行任何互斥保护(因为在发出信号时复制该值,该副本永远不会更改,并且在UI线程中读取该副本) )。但是,如果仍需要在不同时间查询线程的状态,则仍需要锁定。