私は最近 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 秒間遅れるだけで、すべての信号が一度に急増します。さらに、プログラムが遅れている間、イベントループがブロックされているように動作します(ボタンが押されない、サイズ変更が機能しないなど)
ここで何が欠けていますか?