我正在为一些计算密集型任务(机器视觉)开发一个 C++ 类库。
// I am a part of a Qt-agnostic library
class Cruncher
{
/* ... */
public:
void doStuff();
};
然后有一个使用该库的 Qt GUI。我正在创建一个工作线程来调用库中的繁重例程:
// I am a part of a Qt-based GUI which utilizes the library
class Worker : public QThread
{
/* ... */
protected:
virtual void run()
{
/* ... */
Cruncher c;
for (int i = 0; i < count; ++i)
c.doStuff(); // takes some time, and while it's working
// it should communicate status changes which should
// become visible in the GUI
}
};
现在在 doStuff() 内部发生了很多事情,我想向用户提供一些关于正在发生的事情的反馈,而无需等待 doStuff() 返回。一方面,也许比在每次调用 doStuff() 后将仪表增加一步更精细的进度报告。此外,doStuff() 可能会遇到非关键故障,使其继续部分工作,但我希望在 Cruncher 工作时出现这种情况时在 GUI 中显示一条消息(并且 Worker 目前正忙于调用做东西())。
我希望库保持独立于 Qt,所以我不愿意向 Cruncher 添加信号和插槽。当它不是 Qt 类时,还有什么其他方法可以让它向 GUI 提供反馈以报告它的工作?
我正在考虑创建一个 QTimer,它会在 Worker 运行时以固定的时间间隔轮询 Cruncher 的一些“状态”和“errorMsg”成员,但这似乎非常不理想。