QThread类 基本操作
来源:互联网 发布:fifa14罗马里奥数据 编辑:程序博客网 时间:2024/05/10 20:21
线程之间共享数据,但又单独执行;
QT线程QThread是平台无关的;
通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread;
1、线程优先级
总共8个优先级:线程优先级从上到下越来越高。
Constant
Value
Description
QThread::IdlePriority
0
scheduled only when no other threads are running.
QThread::LowestPriority
1
scheduled less often than LowPriority.
QThread::LowPriority
2
scheduled less often than NormalPriority.
QThread::NormalPriority
3
the default priority of the operating system.
QThread::HighPriority
4
scheduled more often than NormalPriority.
QThread::HighestPriority
5
scheduled more often than HighPriority.
QThread::TimeCriticalPriority
6
scheduled as often as possible.
QThread::InheritPriority
7
use the same priority as the creating thread. This is the default.
2、线程管理
2.1、线程启动
void
start ( Priority priority = InheritPriority )
启动线程执行,启动后会发出started信号。
2.2、线程执行
int
exec ()
进入线程eventloop。
virtual void
run ()
线程入口。
2.3、线程退出
void
quit ()
相当于exit(0)。
void
exit ( int returnCode = 0 )
调用exit后,thread将退出event loop,并从exec返回,exec的返回值就是returnCode。
通常returnCode=0表示成功,其他值表示失败。
void
terminate ()
结束线程,线程是否立即终止取决于操作系统。
线程被终止时,所有等待该线程Finished的线程都将被唤醒。
terminate是否调用取决于setTerminationEnabled ( bool enabled = true )开关。
2.4、线程等待
void
msleep ( unsigned long msecs )
void
sleep ( unsigned long secs )
void
usleep ( unsigned long usecs )
bool
wait ( unsigned long time = ULONG_MAX )
线程将会被阻塞,等待time毫秒。和sleep不同的是,如果线程退出,则wait会返回。
2.4、线程状态
bool
isFinished () const
线程是否已退出。
bool
isRunning () const
线程是否还处于运行态。
2.5、线程属性
Priority
priority () const
void
setPriority ( Priority priority )
void
setStackSize ( uint stackSize )
uint
stackSize () const
void
setTerminationEnabled ( bool enabled = true )
设置是否响应terminate()。
3、线程实例
当我们创建线程时,首先是从QThread派生类定义一个新的线程,然后再使用该线程时,创建该线程类的对象。
例如:
class MyThread : public QThread
{
protected:
void run(); /* 重载run */
};
void MyThread::run()
{
QTcpSocket socket;
socket.connectToHost(hostName, portNumber); /* 建立tcp连接 */
exec(); /* 进入事件循环 */
}
int main()
{
MyThread thread; /* 使用新创建的thread */
thread.start(); /* thread会执行run(),建立tcp连接并进入事件循环,直到thread终止退出事件循环 */
thread.wait(); /* 等待thread退出 */
return 0;
}
从QThread派生类时,需要重新实现QThread的虚函数run。
void QThread::run () [virtual protected]
该函数是线程的入口,当我们使用start()启动线程时,新线程就会执行run()。默认的run()函数就仅仅调用了exec()进入事件循环。
当然,定义自己的线程run()时,也可以不使用事件循环,
例如:
class Thread : public QThread
{
Q_OBJECT
public:
Thread();
void setMessage(const QString &message);
void stop();
protected:
void run();
private:
QString messageStr;
volatile bool stopped;
};
Thread::Thread()
{
stopped = false;
}
void Thread::run()
{
while (!stopped) /* 该thread就没有用到exec()进入事件循环 */
std::cerr << qPrintable(messageStr);
stopped = false;
std::cerr << std::endl;
}
void Thread::stop()
{
stopped = true;
}
转载注明出处:http://blog.csdn.net/calm_agan/article/details/6300709
- QThread类 基本操作
- QThread类基本操作 (补充)
- QThread类
- [QT] QThread 类详解
- qt线程类---QThread
- QThread类参考
- QThread类理解
- QThread类参考
- QThread
- QThread
- QThread
- QThread
- QThread
- QThread
- QThread
- QThread
- [Qt学习篇]Qthread实现多线程操作
- Qt多线程操作界面---在QThread更新QProgressBar
- 原型模式
- python下如何调用dll
- 自定义View实现安卓裁剪图片
- 总结过去10年的程序员生涯
- Mybatis学习笔记(四)
- QThread类 基本操作
- 前端学习
- 怎么样Ubuntu下使用随身wifi
- Summary for leetcode 2Sum, 3Sum, 4Sum, K Sum
- 快捷方式:给APP内部某一个Activity创建快捷方式(类似QQ好友快捷方式)
- PL/SQL函数 over(partition by col)
- KVM 虚拟机在 IBM System x 上应用
- 学院程设班级对抗赛总结
- C# 引用的实质