我正在为一些计算密集型任务(机器视觉)开发一个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()后将进度表增加一个步骤。此外,当Cruncher正在工作(且Worker当前正在调用doStuff())时,doStuff()可能遇到非关键性故障,但我希望出现一条消息在GUI中报告这种情况。
我希望该库保持与Qt无关,因此不愿为Cruncher添加信号和槽。还有其他方法可以使其能够在不是Qt类时向GUI提供反馈以报告其工作吗?
我考虑创建一个QTimer,在Worker运行时固定间隔轮询Cruncher的某些“状态”和“errorMsg”成员,但这似乎极为不理想。