mutexを使用できます。キューから「要求」を取り出すたびにロックし、キューに追加するたびにロックします。あなたはこのような
何かを持っていることがあり、この方法は:
#include <QMutex>
#include <QWaitCondition>
class processingThread
{
public:
void appendToQueue(Request req)
{
sync.lock();
queue.append(req);
sync.unlock();
cond.wakeAll();
}
protected:
void run()
{
while(1)
{
sync.lock();
QWaitCondition wait(&sync);
Request current = queue.takeFirst();
// process request
sync.unlock()
}
}
private:
QList<Request> queue;
QMutex sync;
QWaitCondition cond;
};
あなたは今どのスレッドからprocessingThread :: appendToQueueを呼び出し、同期化されたデータを取得することができます。このパターンを使用して、スレッド内のデータを同期させることができます。同期したいデータへのアクセスをロックすることを覚えておいてください。 QWaitConditionは、スレッドが必要なときにのみ動作するようにすることに注意してください。
私は、このような状況があることを正しく理解していますか?Thread1はデータを受け取り、処理のためにThread2に渡し、次のデータを読む前にThread2が終了するのを待ちますか? – Karlson
はい、その通りですが、signal/slotsはオプションではないので、同期は問題です – Anonymous
thread2が処理したデータを処理するまでスレッド1が動かない場合、なぜマルチスレッドが必要ですか?あなたが必要とするのはReceive-> Processのスレッドです。 – Karlson