2

私は、スレッドに関する拡張された有名な生産者と消費者の問題に取り組んでいます(宿題用)。「私のバッファ」として共有キューがあり、プロデューサーは毎秒「要素」を生成する必要があります。

私は(初めて...)QTを使用しています。プロデューサーが毎秒要素を生成するようにタイマーが必要です。

私は QTimer ライブラリを理解していません...タイマーに使用する必要があるライブラリ/関数についてアドバイスをもらえますか? QTimer は GUI 用のようです... Qtimer を使用する必要がある場合は、どうすればよいですか?

ばかげた質問かもしれませんが、この小さなことに時間がかかりすぎています...そして、答えが見つかりません。

4

2 に答える 2

0

(QObjectを使用して)作業を行う必要がある各スレッドでQEventLoopが実行されていることを確認する必要があります。

を実行するメインイベントループ(「GUIスレッド」)がすでにありQApplication.exec()ます。

次に、実行するスレッドにQEventLoopがある別のスレッドを作成します(並列作業を行うため)。通常、QObject(この追加のスレッドで機能する)がこの追加のスレッドを「アフィニティスレッド」として持っていることを確認します。追加のスレッド内からQObjectを作成して元に戻すと、新しいQObjectのアフィニティスレッドが現在のスレッドになります。

これ以外に、QueuedConnectionを使用してスレッド間でシグナル/スロットを渡します。

検索すると、QTimerコードのブログエントリの例がたくさんあると思います。

于 2012-09-24T01:47:59.993 に答える
0

Qtimerを使用して毎秒シグナルを発行するだけです。次に、スロットをそのシグナルに接続して、スレッドを開始できますが、スレッド全体で共有リソース(「私のバッファ」)を管理する必要があります。

QTimer timer=new QTimer(); connect(timer,SIGNAL(timeout()),this,SLOT(On_Timeout));
timer->start(1000);

On_Timeout は毎秒実行されます。

Qtimer の基本的なチュートリアルを次に示します。 http://www.youtube.com/watch?v=pHc7siV2Ads

于 2012-09-24T03:27:54.883 に答える