Qt信号与槽会被阻塞的问题

最新在开发的时候发现这么一个情况
把自定义信号connect到一个槽函数,而在槽函数内部执行的时候用了一个eventloop阻塞当前代码执行,这样的结果就是在emit了自定义的信号后就被槽函数的调用阻塞住了,不会再往下执行,如下:

signals:
	void signal_one();
connect(this, SIGNAL(signal_one()), this, SLOT(funcB()));

void funcA() {
	emit signal_one();
	std::cout << "after emit" << std::endl;
}

void funcB() {
	QEventLoop loop;
	loop.exec();
}

这样的结果就是那句after emit并不会被打印,所以大概可以知道Qt的信号触发的槽函数和发出信号本身是处在同一个线程当中的,无法异步执行

我用的解决办法是在类中定义一个QTimer *timer,然后connect(timer, SIGNAL(timeout()), this, SLOT(funcC()));在funcB中就只是执行timer.start(10);,而在funcC中去执行阻塞的操作,这样在funcA中emit信号之后,那句after emit就可以被打印出来。

你可能感兴趣的:(Qt,qt,c++)