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

挣扎中前行 2014-07-10 12:35:10
我在线程里面启动一个定时器完成相当于“心跳”的功能,网络正常通讯时正常,一旦网络断掉,socket读写超时阻塞时,会影响界面显示,出现卡顿现象。这怎么解释?
...全文
2239 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbzhang800 2014-07-10
  • 打赏
  • 举报
回复
引用 3 楼 zhenwo123 的回复:
[quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
引用 1 楼 zhouguoji 的回复:
不会的。。。。。。。
可我着真的出现了啊
zhouguoji 2014-07-10
  • 打赏
  • 举报
回复
要看你的代码是怎么设计的。
zhouguoji 2014-07-10
  • 打赏
  • 举报
回复
不会的。。。。。。。
dbzhang800 2014-07-10
  • 打赏
  • 举报
回复
QThread是一个很简单,又很复杂的东西。下面的blog应该能回答你关于QThread的几乎所有疑问 http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
引用 9 楼 dbzhang800 的回复:
[quote=引用 8 楼 zhenwo123 的回复:] [quote=引用 7 楼 dbzhang800 的回复:] [quote=引用 5 楼 zhenwo123 的回复:] [quote=引用 4 楼 dbzhang800 的回复:] [quote=引用 3 楼 zhenwo123 的回复:] [quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。[/quote]
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()
{。。。。。。

[/quote] 你这儿的NetThread是QThread的派生类? 如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。[/quote] 肯定是啊! 网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦[/quote] 实际上,不是的话,会更简单。[/quote] 为啥是QThread的派生类,QTimer不在次线程中,你的槽函数也不会在次线程中执行???
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
不对不对!m_timer = new QTimer()放到run()里,都启动不了定时器!
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
谁给解释下为什么呢!
dbzhang800 2014-07-10
  • 打赏
  • 举报
回复
引用 8 楼 zhenwo123 的回复:
[quote=引用 7 楼 dbzhang800 的回复:] [quote=引用 5 楼 zhenwo123 的回复:] [quote=引用 4 楼 dbzhang800 的回复:] [quote=引用 3 楼 zhenwo123 的回复:] [quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。[/quote]
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()
{。。。。。。

[/quote] 你这儿的NetThread是QThread的派生类? 如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。[/quote] 肯定是啊! 网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦[/quote] 实际上,不是的话,会更简单。
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
引用 7 楼 dbzhang800 的回复:
[quote=引用 5 楼 zhenwo123 的回复:] [quote=引用 4 楼 dbzhang800 的回复:] [quote=引用 3 楼 zhenwo123 的回复:] [quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。[/quote]
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()
{。。。。。。

[/quote] 你这儿的NetThread是QThread的派生类? 如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。[/quote] 肯定是啊! 网上看到 “m_timer = new QTimer()放到run()里“ 试了下真的解决啦
dbzhang800 2014-07-10
  • 打赏
  • 举报
回复
引用 5 楼 zhenwo123 的回复:
[quote=引用 4 楼 dbzhang800 的回复:] [quote=引用 3 楼 zhenwo123 的回复:] [quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。[/quote]
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()
{。。。。。。

[/quote] 你这儿的NetThread是QThread的派生类? 如果是的话,不光你的QTimer不在次线程中,你的槽函数也不会在次线程中执行。
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
槽函数在线程中执行啊
挣扎中前行 2014-07-10
  • 打赏
  • 举报
回复
引用 4 楼 dbzhang800 的回复:
[quote=引用 3 楼 zhenwo123 的回复:] [quote=引用 1 楼 zhouguoji 的回复:] 不会的。。。。。。。
可我着真的出现了啊[/quote] 但是,你并没有证据证明你的槽函数是在次线程执行的啊? 另外,定时器放于次线程,和放在主线程,本身也没多大区别,关于在,你的槽函数在那个线程中执行。[/quote]
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()
{。。。。。。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧