我最近才开始使用 QThreads API 并遇到了一个奇怪的问题。
我用重新实现的 run() 方法创建了 QThread 的子类,它是:
void ThreadChecker::run()
{
emit TotalDbSize(1000);
for (int i = 0; i < 1000; i++)
{
QString number;
number.setNum(i);
number.append("\n");
emit SimpleMessage(number);
//pausing is necessary, since in the real program the thread will perform quite lenghty tasks
usleep(10000);
}
}
下面是调用这个线程的代码:
ThreadChecker thread;
connect(&thread, SIGNAL(TotalDbSize(int)), this, SLOT(SetMaximumProgress(int)));
//This slot writes the message into the QTextEdit
connect(&thread, SIGNAL(SimpleMessage(QString)), this, SLOT(ProcessSimpleMessage(QString)));
thread.start();
我打算这样做的方式是让 QTextEdit 每 10 毫秒更新一次。但相反,该程序仅滞后 10 秒,然后所有信号立即涌现。此外,虽然程序滞后,但它的行为就像事件循环被阻止(按钮不会[按下,调整大小不起作用等)
我在这里想念什么?