Chinaunix首页 | 论坛 | 博客
  • 博客访问: 851444
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: LINUX

2012-09-21 15:24:51

该类提供平台各自独立的线程

#include
继承QObject


公共类型
enum Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority, ..., InheritPriority }


公共函数
QThread ( QObject * parent = 0 ) ~QThread ()

void exit ( int returnCode = 0 )bool isFinished () constbool 

isRunning ()

constPriority priority ()

constvoid setPriority ( Priority priority )

void setStackSize ( uint stackSize )

uint stackSize ()

constbool wait ( unsigned long time = ULONG_MAX )


公共槽
void quit ()

void start ( Priority priority = InheritPriority )

void terminate ()信号
void finished ()

void started ()

void terminated ()

 

静态公共成员
QThread * currentThread ()

Qt::HANDLE currentThreadId ()

int idealThreadCount ()

void yieldCurrentThread ()

 

受保护的函数
int exec ()

virtual void run ()静态受保护的成员
void msleep ( unsigned long msecs )

void setTerminationEnabled ( bool enabled = true )
void sleep ( unsigned long secs )

void usleep ( unsigned long usecs )详细描述
一个QThread代表一个独立的线程控制在程序中。它分享数据和所有其他的线程,但是独立运行在一个多任务的操作系统中。代替开始

main中,QThread开始在run。默认的,run开始时间循环,通过调用exec。为了创建你自己的线程,建QThread的子类,并继承run

例如:
class MyThread : public QThread
 {
 public:
     void run();
 };

 void MyThread::run()
 {
     QTcpSocket socket;
     // connect QTcpSocket's signals somewhere meaningful
     ...
     socket.connectToHost(hostName, portNumber);
     exec();
 }
这将创建一个QTcpSocket在这个线程中,运行线程的时间循环。使用start方法来开始运行。当你返回从run,运行结束,就像一个应用那样当你离开mainQThread将注意你发出一个信号,当线程startedfinishedterminated,或者你能用isFinishedisRunning

来查询线程的状态,使用wait来阻塞,直到线程已经完成运行。

每个线程得到他自己的堆栈从操作系统中。操作系统也决定堆栈的默认大小。你能使用setStackSize来设置一个惯例的堆栈大小。
每个QThread能有他自己的事件循环。你能开始事件循环通过调用exec。你能停止它通过调用exitquit。拥有一个事件循环使信号和槽的链接成为可能。使用一个机制叫做队列链接。它也使使用那些要求事件循环的类成为可能,例如QTimerQTcpSocket。注意,尽

管如此,那是不可能的使用任何widget的类。
在极端情况下,你可能想强制terminate一个线程。尽管如此,那样做是危险地和应该被阻止的。请读文件为terminatesetTerminationEnabled
静态函数currentThreadIdcurrentThread返回目前运行的线程的标示符。
QThread
也提供平***立的sleep函数。使用sleepmsleepusleep
成员类型文件
enum QThread::Priority
enum
类型代表操作系统怎样安排新产生的线程。
内容         描述
QThread::IdlePriority  0   
安排只是当没有其他线程在运行
QThread::LowestPriority 1   
安排少于低优先级
QThread::LowPriority  2   
安排少于正常优先级
QThread::NormalPriority 3   
默认的操作系统优先级
QThread::HighPriority  4   
安排高于正常优先级
QThread::HighestPriority 5   
安排高于高优先级
QThread::TimeCriticalPriority 6   
尽可能的安排
QThread::InheritPriority  7   
使用同样的优先级,这是默认的
成员函数文件
QThread::QThread(QObject* parent=0)
构造一个新的线程用被给的parent。这个线程不开始运行直到start被调用
QThread::~QThread ()
摧毁线程
注意删除一个线程对象将不停止运行线程。删除一个运行的QThread将可能导致一个程序冲突。你能wait来确保它完成。
QThread * QThread::currentThread ()   [static]
返回一个代表目前运行的线程的指针。
Qt::HANDLE QThread::currentThreadId ()   [static]
返回线程句柄。
警告:该函数返回的句柄是被使用为了内部目的,不应该被用于任何应用的代码。
windows,返回值是一个假句柄。它不能被使用为数值比较。这个函数返回DWORD返回被win32函数getCurrentThreadId,不是被getCurrentThread返回的handle
int QThread::exec ()   [protected]
进入事件循环,等直到exit被调用。如果通过quit调用exit,返回值将是0。那是必须的调用这个函数来开始事件循环。
void QThread::exit ( int returnCode = 0 )
告诉线程的事件循环来退出
在调用这个函数后,线程离开事件循环,返回从QEventLoop::exec()。并且返回返回码。
根据协定,返回0代表成功,非0代表失败
注意不像c函数,这个函数返回caller—it is event processing thar stops.
如果没有一个事件循环,这个函数不做任何事情。
void QThread::finished ()   [signal]
这个信号被发出当线程结束运行。
int QThread::idealThreadCount ()   [static]
返回能被运行在系统上的理想的线程数。
bool QThread::isFinished () const
返回true如果线程是完成的。
bool QThread::isRunning () const
void QThread::msleep ( unsigned long msecs )   [static protected]
Priority QThread::priority () const
返回一个线程的优先级,如果函数不运行,返回inheritPriority
void QThread::quit ()   [slot]
等同于exit(0).
void QThread::run ()   [virtual protected]
线程的开始点。在调用start后,新的线程调用这个函数,默认的继承调用exec
你能重载这个函数来做其他有用的工作。
void QThread::setPriority ( Priority priority )
设置优先级
void QThread::setStackSize ( uint stackSize )
设置最大的堆栈大小为线程。
警告:大部分操作系统预设最大和最小限制在线程堆栈大小上。这个线程将失败开始,如果堆栈是不在这个限制范围内
void QThread::setTerminationEnabled ( bool enabled = true )   [static protected]
设置terminate()函数的有效性。
void QThread::sleep ( unsigned long secs )   [static protected]
uint QThread::stackSize () const
void QThread::start ( Priority priority = InheritPriority )   [slot]
开始运行程序通过调用run
void QThread::started ()   [signal]
当线程开始,发出该信号。
void QThread::terminate ()   [slot]
终止运行的线程。这个线程可能马上终止,也可能延时终止。在terminate后使用wait 同步终止。
警告:这个函数是危险地,不被鼓励使用。
void QThread::terminated ()   [signal]
void QThread::usleep ( unsigned long usecs )   [static protected]
bool QThread::wait ( unsigned long time = ULONG_MAX )
阻塞线程直到这些情况被遇到
线程结束运行。
Time
已经过去。(超时)
void QThread::yieldCurrentThread ()   [static]
让开线程给另一个可运行的线程。注意这由操作系统决定

Qt线程中有一个公共的抽象类,所有的线程都是从这个QThread抽象类中派生的,要实现QThread中的纯虚函数run(),run()函数是通过 start()函数来实现调用的。例如


1 class MyThread : public QThread {
2     public:
3         virtual void run();
4     };
5
6     void MyThread::run()
7     {
8         for( int count = 0; count < 20; count++ ) {
9             sleep( 1 );
10             qDebug( "Ping!" );
11         }
12     }
13
14     int main()
15     {
16         MyThread a;
17         MyThread b;
18
19         a.start();//自动调用run(),否则即使该线程创建,也是一开始就挂起
20         b.start();
21         //要等待线程a,b都退出
22         a.wait();
23         b.wait();
24     }

阅读(4660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~