在我的(Qt-)程序中,我需要连续请求一个从外部源获取的值。但我不希望这个请求冻结整个程序,所以我为这个函数创建了一个单独的线程。但即使它在一个单独的线程中运行,GUI也会冻结。为什么呢?
请求函数的代码:
void DPC::run()
{
int counts = 0, old_counts = 0;
while(1)
{
usleep(50000);
counts = Read_DPC();
if(counts != old_counts)
{
emit currentCount(counts);
old_counts = counts;
}
}
}
Read_DPC()
返回我想要发送到GUI中lineEdit的int值
主要类看起来像
class DPC: public QThread
{
Q_OBJECT
public:
void run();
signals:
void currentCount(int);
};
此代码在main函数中调用为:
DPC *newDPC = new DPC;
connect(newDPC, SIGNAL(currentCount(int)), SLOT(oncurrentCount(int)));
connect(newDPC, SIGNAL(finished()), newDPC, SLOT(deleteLater()));
newDPC->run();
如何防止此代码冻结我的GUI?我究竟做错了什么? 谢谢!
答案 0 :(得分:5)
您似乎在GUI线程中运行代码,因为您使用run()
方法启动线程,因此请尝试将start()
作为文档调用,许多示例都说。
尝试:
DPC *newDPC = new DPC;
connect(newDPC, SIGNAL(currentCount(int)), SLOT(oncurrentCount(int)));
connect(newDPC, SIGNAL(finished()), newDPC, SLOT(deleteLater()));
newDPC->start();//not run
无论如何,您可以调用thread()
方法或currentThread()来查看某些对象所在的线程。