マルチスレッドにおける引数の渡し方

Qtでは、シグナル/スロットの仕組みを利用して、マルチスレッド間でパラメータを渡すことができます。一般的な方法を以下に示します。

  1. パラメーターを持つシグナルとスロット関数を定義します:
class Worker : public QObject
{
Q_OBJECT
public:
Worker() {}
public slots:
void doWork(int parameter)
{
// 处理参数
}
signals:
void workDone(int result);
};
  1. ワーカスレッドを作成して、信号とスロットを接続します
QThread* thread = new QThread;
Worker* worker = new Worker;
// 将worker的doWork函数与thread的started信号连接
connect(thread, &QThread::started, worker, &Worker::doWork);
// 将worker的workDone信号与thread的quit和deleteLater槽连接
connect(worker, &Worker::workDone, thread, &QThread::quit);
connect(worker, &Worker::workDone, worker, &Worker::deleteLater);
// 将worker对象移动到工作线程
worker->moveToThread(thread);
// 启动工作线程
thread->start();
  1. 引数のある引数があれば、引数が渡されるようにシグナルを飛ばしてください。
class Sender : public QObject
{
Q_OBJECT
public:
Sender() {}
signals:
void sendParameter(int parameter);
};
Sender* sender = new Sender;
Worker* worker = new Worker;
// 将sender的sendParameter信号与worker的doWork槽连接
connect(sender, &Sender::sendParameter, worker, &Worker::doWork);
// 发送参数
int parameter = 42;
emit sender->sendParameter(parameter);

このとき、sender が sendParameter シグナルを emit すると、その引数値はシグナルとスロットの仕組みで worker の doWork 関数に渡されて処理されます。

bannerAds