为什么qthread有点不靠谱~~~~~~~~~~

god_sun 2010-04-21 11:31:42
线程里做事情的时候都没进timer都没有效果,也就是说都没进到timerEvent事件中~~~
而我屏蔽了线程就可以进去
高手指点下


QObject::connect(&Thread, SIGNAL(vdGuiProcess()), this, SLOT(vdGuiProcess()));

void MyBusiThread::run ()
{
emit vdGuiProcess();
return;
}

void CxxWnd::vdGuiProcess()
{
...do sometings
killTimer(iTimer);
delete m_progress;
m_progress = NULL;

}
void CxxWnd::timerEvent(QTimerEvent * event)
{
if(m_progressValue >= 100)
m_progressValue=0;
m_progressValue+=1;
m_progress->setValue(m_progressValue);

}
void CxxWnd::DownSyncInfo()
{
m_textEdit->setText("");
m_progressValue = 0;
m_progress = new QProgressDialog(tr("下载数据中..."), "", 0, 100); //需要的话,将对话框设为模态
m_progress->setWindowModality(Qt::WindowModal);
m_progress->show();
m_progress->setValue(0);
//新建进度条线程
iTimer = startTimer(50);
Thread.start();
}
...全文
188 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonglovemeng 2010-04-22
  • 打赏
  • 举报
回复
不知已经被你 kill 了吗?

iTimer = startTimer(50); //开始Timer 立刻返回
Thread.start(); //线程开始 run 执行

void MyBusiThread::run () {
emit vdGuiProcess(); // 放出信号 调用 CxxWnd::vdGuiProcess()
return;
}

void CxxWnd::vdGuiProcess() {
...do sometings
killTimer(iTimer);
//计数器被干掉了,第一次执行需要50毫秒的周期,可是线程执行到这里 都用不了 50毫秒。
delete m_progress;
m_progress = NULL;
}
dext 2010-04-21
  • 打赏
  • 举报
回复
不知已经被你 kill 了吗?

iTimer = startTimer(50); //开始Timer 立刻返回
Thread.start(); //线程开始 run 执行

void MyBusiThread::run () {
emit vdGuiProcess(); // 放出信号 调用 CxxWnd::vdGuiProcess()
return;
}

void CxxWnd::vdGuiProcess() {
...do sometings
killTimer(iTimer);
//计数器被干掉了,第一次执行需要50毫秒的周期,可是线程执行到这里 都用不了 50毫秒。
delete m_progress;
m_progress = NULL;
}


aoxuehan0424 2010-04-21
  • 打赏
  • 举报
回复
LZ用这个试试:
connect(&timer,SIGNAL(timeout()),this,SLOT(“这里用一个槽来处理timeEvent里面的事情”));
tingsking18 2010-04-21
  • 打赏
  • 举报
回复
可以执行阿。
但是你killtimer是为什么?
god_sun 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cuzn1024 的回复:]
do something 部分放到run函数里边看看。
[/Quote]
run里面没调用界面类的接口,所以通过信号传出去
  • 打赏
  • 举报
回复
do something 部分放到run函数里边看看。
god_sun 2010-04-21
  • 打赏
  • 举报
回复
刚又在 kill之前sleep(5) 秒
也没进去执行
god_sun 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dext 的回复:]
不知已经被你 kill 了吗?

iTimer = startTimer(50); //开始Timer 立刻返回
Thread.start(); //线程开始 run 执行

void MyBusiThread::run () {
emit vdGuiProcess(); // 放出信号 调用 CxxWnd::vdGuiProcess()
return;
}

void……
[/Quote]

关键是我的
do something中间做了很多事情,,,显然大大超过的50ms~~

16,212

社区成员

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

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