Qt のドキュメントには、シグナルとスロットはdirect
、 、queued
およびであると記載されていますauto
。
また、スロットを所有するオブジェクトがシグナルを所有するオブジェクトとは異なるスレッドに「住んでいる」場合、そのようなシグナルを発行することはメッセージを投稿するようなものになると述べました-シグナルの発行は即座に戻り、スロットメソッドはターゲットスレッドのイベントループで呼び出されます。
残念ながら、ドキュメントには「lives」が何を意味するかは明記されておらず、例もありません。次のコードを試しました:
main.h:
class CThread1 : public QThread
{
Q_OBJECT
public:
void run( void )
{
msleep( 200 );
std::cout << "thread 1 started" << std::endl;
MySignal();
exec();
}
signals:
void MySignal( void );
};
class CThread2 : public QThread
{
Q_OBJECT
public:
void run( void )
{
std::cout << "thread 2 started" << std::endl;
exec();
}
public slots:
void MySlot( void )
{
std::cout << "slot called" << std::endl;
}
};
main.cpp:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CThread1 oThread1;
CThread2 oThread2;
QObject::connect( & oThread1, SIGNAL( MySignal() ),
& oThread2, SLOT( MySlot() ) );
oThread1.start();
oThread2.start();
oThread1.wait();
oThread2.wait();
return a.exec();
}
出力は次のとおりです。
thread 2 started
thread 1 started
MySlot()
呼び出されることはありません:(。私が間違っていることは何ですか?