qt 线程内定时器会阻塞主界面吗?

时间:2021-12-24 23:31:44
我在线程里面启动一个定时器完成相当于“心跳”的功能,网络正常通讯时正常,一旦网络断掉,socket读写超时阻塞时,会影响界面显示,出现卡顿现象。这怎么解释?

13 个解决方案

#1


不会的。。。。。。。

#2


要看你的代码是怎么设计的。

#3


引用 1 楼 zhouguoji 的回复:
不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?

#4


引用 3 楼 zhenwo123 的回复:
Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。

#5


引用 4 楼 dbzhang800 的回复:
Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。

#6


槽函数在线程中执行啊

#7


引用 5 楼 zhenwo123 的回复:
Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。

#8


引用 7 楼 dbzhang800 的回复:
Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?

#9


引用 8 楼 zhenwo123 的回复:
Quote: 引用 7 楼 dbzhang800 的回复:

Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?


实际上,不是的话,会更简单。

#10


谁给解释下为什么呢!

#11


不对不对!m_timer = new QTimer()放到run()里,都启动不了定时器! qt 线程内定时器会阻塞主界面吗?

#12


引用 9 楼 dbzhang800 的回复:
Quote: 引用 8 楼 zhenwo123 的回复:

Quote: 引用 7 楼 dbzhang800 的回复:

Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?


实际上,不是的话,会更简单。


为啥是QThread的派生类,QTimer不在次线程中,你的槽函数也不会在次线程中执行???

#13


QThread是一个很简单,又很复杂的东西。下面的blog应该能回答你关于QThread的几乎所有疑问

http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/

#1


不会的。。。。。。。

#2


要看你的代码是怎么设计的。

#3


引用 1 楼 zhouguoji 的回复:
不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?

#4


引用 3 楼 zhenwo123 的回复:
Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。

#5


引用 4 楼 dbzhang800 的回复:
Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。

#6


槽函数在线程中执行啊

#7


引用 5 楼 zhenwo123 的回复:
Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。

#8


引用 7 楼 dbzhang800 的回复:
Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?

#9


引用 8 楼 zhenwo123 的回复:
Quote: 引用 7 楼 dbzhang800 的回复:

Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?


实际上,不是的话,会更简单。

#10


谁给解释下为什么呢!

#11


不对不对!m_timer = new QTimer()放到run()里,都启动不了定时器! qt 线程内定时器会阻塞主界面吗?

#12


引用 9 楼 dbzhang800 的回复:
Quote: 引用 8 楼 zhenwo123 的回复:

Quote: 引用 7 楼 dbzhang800 的回复:

Quote: 引用 5 楼 zhenwo123 的回复:

Quote: 引用 4 楼 dbzhang800 的回复:

Quote: 引用 3 楼 zhenwo123 的回复:

Quote: 引用 1 楼 zhouguoji 的回复:

不会的。。。。。。。


可我着真的出现了啊 qt 线程内定时器会阻塞主界面吗?


但是,你并没有证据证明你的槽函数是在次线程执行的啊?

另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。


NetThread::NetThread()
{
tran_task = 0;
task_counter = 0;
image_buf = new char [1024*20];
update_check_timer = new QTimer(this);
connect(update_check_timer, SIGNAL(timeout()), this, SLOT(update_check())); //时间显示
}

NetThread::~NetThread()
{
delete image_buf;
}

void NetThread::update_check()
{。。。。。。


你这儿的NetThread是QThread的派生类?

如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。



肯定是啊!

网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦 qt 线程内定时器会阻塞主界面吗?


实际上,不是的话,会更简单。


为啥是QThread的派生类,QTimer不在次线程中,你的槽函数也不会在次线程中执行???

#13


QThread是一个很简单,又很复杂的东西。下面的blog应该能回答你关于QThread的几乎所有疑问

http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/