저는 C++로 Qt 애플리케이션을 작성하고 있습니다. 나는 QThreadPool에서 실행중인 QRunnable을 가지고 있으며, 주 스레드로 신호를 보냅니다. 문제는 연결이 작동하지 않는다는 것입니다. 즉, 방출을 수행하는 코드가 실제로 호출 되었음에도 불구하고 신호가 주 스레드에 의해 수신되지 않습니다. 여기 내 코드입니다 :Qt QRunnable의 신호가 수신되지 않았거나 연결되지 않았습니다.
내 QRunnable 클래스 :
class OfflineAnalysisThread : public QObject, public QRunnable
{
Q_OBJECT
public:
void run();
void sendMessage(QString &qmsg)
{
emit threadMessageCallback(qmsg);
}
signals:
void threadMessageCallback(QString &string);
};
그리고 호출 클래스 (메인 스레드) :
class OfflineAnalysisMain : public QObject
{
Q_OBJECT
public:
(...)
public slots:
void threadMsg(QString &string);
};
새로운 QRunnables를 인스턴스화하고이를 시작하는 코드 :
void OfflineAnalysisMain::myFunction()
{
OfflineAnalysisThread *newTask = new OfflineAnalysisThread();
QObject::connect(newTask, SIGNAL(threadMessageCallback(QString &)), this, SLOT(threadMsg(QString &)));
QThreadPool::globalInstance()->start(newTask);
}
내 QRunnable의 실행 함수에서 sendMessage를 호출 한 다음 QApplication :: exec()를 수행합니다. OfflineAnalysisMain.cpp의 threadMsg 슬롯 구현에 중단 점이 있으며 해당 함수가 호출되지 않습니다.
내가 뭘 잘못하고 있니?
UPDATE : 내 OfflineAnalysisThread :: 실행의
정의() 함수 :
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
나는 또한의 QApplication없이 시도 :: 간부를(); 성공하지.
'OfflineAnalysisThread :: run()'에 대한 정의를 보여주십시오. 당신이 쓴 것에서부터 그것은 옳지 않습니다. 'run()'에서'QApplication :: exec()'를 호출해서는 안됩니다. –
방금 내 정의를 run()으로 업데이트했습니다. 이것을 봐주세요. 또한 exec()없이 시도했다 (실제로 내 원래 코드를 exec() 작동하도록 추가 할 추가). –