Mainthreadの別のスレッドの関数を呼び出すことはできません。問題なく他のスレッドからシグナルを呼び出すことは許されていますか?このコードがMainWindowにあるとしましょう:QThreadはスレッドセーフです
スレッド→moveTOThread(obj); emit obj-> Signal();
は
か、これが移動するための方法であるあなたに感謝:
Obj.h
signals:
void testSignal();
public slots:
void Func();
MainWindow.h
void testSignal();
MainWindow.cpp
thread->moveTOThread(obj);
connect(this,SIGNAL(testSignal()),obj,SIGNAL(testSignal()));
emit testSignal();
Obj.cpp
connect(this,SIGNA(testSignal()),this,SLOT(Func()));
私はちょうどobjの関数を何とか呼びたいと思っています。以来、obj-> Func();スレッドセーフではありません私はスレッドセーフな方法を探しています。私はobjからシグナルを出し、obj-constructorのシグナルをSlot Func()に接続する必要があります。どうすればFunc()threadsafeを呼び出すことができますか? – Bob
@Bob 'クラスB 'は別のスレッドに存在するオブジェクトであると仮定すると、'クラスA'の信号を 'クラスB 'のスロットに接続するだけです。 'Class B 'の信号を' Class B'のスロットに接続してから、この信号を呼び出す必要はありません。 – thuga
@Bobうーん...もしあなたが望むなら、誰もあなたを止めることはできません。しかし、それはスレッド境界を壊し、そうするのは安全ではありません。あなたのオブジェクト関数を安全に呼び出すには、シグナルを送信することです...その2行のコードが余分に必要です!接続する1本の線、信号を放射する1本の線(ああ、信号を宣言する必要があります)...それだけです!すべてのこの大騒ぎは消え去る。あるいは、これがオブジェクトのインスタンス化を必要としない何らかの "ヘルパー"関数であれば、それを静的関数にすることができます...あなたのユースケースは何ですか?あなたの機能は何をしていますか? –