• 5736阅读
  • 3回复

请教一个关于线程的简单问题 [复制链接]

上一主题 下一主题
离线tim09
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-12
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
用Qt不太久,刚做一个线程的东西,总是不对,想请教一下大家. 问题是这样,我有一个readthread线程,它要不断的输出一个字符,程序如下
readthread::readthread()
{
}

readthread::readthread(QTextEdit *msgEdit)
{
    rt_qtedit = msgEdit;
    rt_qtedit->append("create read thread");
}

void readthread::run()
{
    for(;;)
    {
        rt_qtedit->append("hallo");
    }

}

在另一个程序readtest里,我创建了一个readthread的实例,然后把readtest里创建的输出窗口,就是QTextEdit的那个对象qtedit,传递给readthread,我是希望readthread线程里的run()能把字符都输出到qtedit这个窗口,程序如下
readtest::readtest(QWidget* parent) : QWidget(parent)
{
    qtedit = new QTextEdit;
    readTask = new readthread(qtedit);

    QHBoxLayout *main_layout = new QHBoxLayout;
    main_layout->addWidget(qtedit);
    setLayout(main_layout);
    readTask->start();
}

很简单的一个东西,可总不对,创建readthread时,"create read thread"这段话可见,但是"hallo"不可见,而且一运行到append("hallo")时就会出错,麻烦谁能指点一下吗? 先谢谢了

离线radium_sql

只看该作者 1楼 发表于: 2008-11-12
Qt的线程里是不可以操作GUI的,要不然你把那个append放在主线程里做,由线程产生字符然后当作信号发射出来。
QT什么时候替代MFC?
离线wvins
只看该作者 2楼 发表于: 2008-11-12
同意楼上的,不管是什么框架
都不建议在自己的工作线程中操作GUI界面

如果非要这么做,那肯定是你的线程模型有问题
离线tim09
只看该作者 3楼 发表于: 2008-11-12
谢谢楼上俩位,试了一下确实是这样,用emit就可以解决. 再次感谢 
快速回复
限100 字节
 
上一个 下一个