• 20438阅读
  • 12回复

Qt线程与主线程通信问题 [复制链接]

上一主题 下一主题
离线lgl_2008
 
只看楼主 倒序阅读 楼主  发表于: 2008-10-25
— 本帖被 XChinux 执行加亮操作(2008-11-02) —
我在一个run()
{
int i = 0;
while (i != 1000)
{
i++;
}
}我要把这个“i”实时的发送到主线程里面的一个edit控件里面显示,用信号槽怎么解决?我自己写的老是不工作,哪个大侠写个简单例子给我看看,不要书上面的那个例子,初次接触多线程,请大家多多指教。。。
离线wu9961

只看该作者 1楼 发表于: 2008-10-25
把界面对象的指针传到该线程 然后直接在run里面改变edit控件里面的内容
离线lgl_2008
只看该作者 2楼 发表于: 2008-10-25
但我不知道怎么获取到界面的指针,函数是什么?
离线首席公民
只看该作者 3楼 发表于: 2008-10-25
不可以在非界面的进程中直接操作界面的
Qt的文档有这么说

据说4之前版本可以,没有试过
-----------------------------------------------
欢迎访问
http://blog.csdn.net/wjstone
-----------------------------------------------
离线yj_yulin

只看该作者 4楼 发表于: 2008-10-25
postevent或者sendevent
离线lgl_2008
只看该作者 5楼 发表于: 2008-10-25
我正在试postevent,但是在对派生QCustomEvent时却出现这样的错误error: expected class-name before '{' token, 我检查了是没有问题的,我是这样写的:

enum {sendProc = 1001};
class ProcessStateEvent : public QCustomEvent
{
    public:
    ProcessStateEvent();
    QString message;
};
离线htyoung

只看该作者 6楼 发表于: 2008-10-25
给个简单的例子:
QT4.1以上

你只要在重载 QThread::run 函数时发个signal出去,然后让主线成接受就行了.



你只需要如下


void YourQThread::run ()
{
    QString tmp= "hello 2 windows"

  while(1)
{
         emit traceLog(tmp);   
      msleep(1000);   
}

}

然后在只需要有人能接受这个traceLog信号就行



  connect(YourQThread, SIGNAL(traceLog(QString )),this, SLOT(slotGetThraceLog(QString )));

需要注意的是:
QT里的 signal和slot机制比较慢,大概一次需要110ms(windows),这是要注意的.

qt下有你要的完整例子:

%QTDIR%\examples\threads\
***
QT5
***
离线lgl_2008
只看该作者 7楼 发表于: 2008-10-25
谢谢,我按照你的方法解决了
离线wu9961

只看该作者 8楼 发表于: 2008-11-22
引用第6楼htyoung于2008-10-25 22:59发表的  :
给个简单的例子:
QT4.1以上
你只要在重载 QThread::run 函数时发个signal出去,然后让主线成接受就行了.
.......

请问除了信号与槽机制外 还能采用什么办法
离线htyoung

只看该作者 9楼 发表于: 2008-11-22
引用第8楼wu9961于2008-11-22 20:18发表的  :
请问除了信号与槽机制外 还能采用什么办法


看看这个, qt的多线程向外发送信号的问题
http://www.qtcn.org/bbs/read.php?tid=13976&fpage=2

请看一下里边关于FIFO的回答。
***
QT5
***
离线fangjuntan

只看该作者 10楼 发表于: 2008-11-23
回 7楼(lgl_2008) 的帖子
你是用六楼同志的方法解决的吗?
离线wu9961

只看该作者 11楼 发表于: 2008-11-24
我想请问一下 如果用postevent的方法这个问题怎么解决
离线waterddy

只看该作者 12楼 发表于: 2008-11-25
也可以不要受Qt的束缚,利用线程通讯的只是,putevent和sendevent,直接在两个线程之间传递信息,这样更简单
快速回复
限100 字节
 
上一个 下一个