网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Programming > QT > 文章  
Qt中的多线程编程
文章来源: IBM Developerworks 文章作者: 续欣 发布时间: 2004-04-01   字体: [ ]  
 

class UserEvent : public QCustomEvent   //用户自定义的事件类
{
public:
 UserEvent(QString s) : QCustomEvent(346798), sz(s) { ; }
 QString str() const { return sz; }
private:
 QString sz;   
};

  UserThread类是由QThread类继承而来的子类,在该类中除了定义有关的变量和线程控制函数外,最主要的是定义线程的启动函数UserThread::run(),在该函数中创建了一个用户自定义事件UserEvent,并利用QThread类的postEvent函数提交该事件给相应的接收对象。

class UserThread : public QThread      //用户定义的线程类
{
public:
 UserThread(QObject *r, QMutex *m, QWaitCondition *c);
 QObject *receiver;
}
 
void UserThread::run()     //线程类启动函数,在该函数中创建了一个用户自定义事件
{
 UserEvent *re = new UserEvent(resultstring);
 QThread::postEvent(receiver, re);
}

  UserWidget类是用户定义的用于接收自定义事件的QWidget类的子类,该类利用slotGo()函数创建了一个新的线程recv(UserThread类),当收到相应的自定义事件(即id为346798)时,利用customEvent函数对事件进行处理。

void UserWidget::slotGo()    //用户定义控件的成员函数
{
 mutex.lock(); 
   
 if (! recv)
  recv = new UserThread(this, &mutex, &condition);
   
 recv->start();
 mutex.unlock();
}
 
void UserWidget::customEvent(QCustomEvent *e)   //用户自定义事件处理函数
{
 if (e->type()==346798)
 {
  UserEvent *re = (UserEvent *) e;
  newstring = re->str();
 }
}

  在这个例子中,UserWidget对象中创建了新的线程UserThread,用户可以利用这个线程实现一些周期性的处理(如接收底层发来的消息等),一旦满足特定条件就提交一个用户自定义的事件,当UserWidget对象收到该事件时,可以按需求做出相应的处理,而一般情况下,UserWidget对象可以正常地执行某些例行处理,而完全不受底层消息的影响。

 
推荐文章
·QT的信号与槽机制介绍
·Qt 的内部进程通信机制
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·QT的信号与槽机制介绍
·Qt 的内部进程通信机制
相关文章
·Qt 的内部进程通信机制
·QT的信号与槽机制介绍
·GCC创建共享库
·Linux操作系统中用PHP构
·致初学者:PHP比ASP优秀
·Linux如何处理当前运行
·Linux操作系统套接字编
·用户密码过期通知
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统