概述
终于闲下来写点总结了。
一、线程相关类
Qt 提供线程管理类QThread类。
实现对现场两种方式
1. 继承QThread,实现 run()方法通过调用exec()启动事件循环并在线程里运行一个Qt的事件循环。
2. 可以使用worker-object通过QObject::moveToThread将它们移动到线程。
class Q_CORE_EXPORT QThread : public QObject
{
Q_OBJECT
public:
static Qt::HANDLE currentThreadId() Q_DECL_NOTHROW;
static QThread *currentThread();
static int idealThreadCount() Q_DECL_NOTHROW;
static void yieldCurrentThread();
explicit QThread(QObject *parent = 0);
~QThread();
enum Priority {
IdlePriority,
LowestPriority,
LowPriority,
NormalPriority,
HighPriority,
HighestPriority,
TimeCriticalPriority,
InheritPriority
};
void setPriority(Priority priority);
Priority priority() const;
bool isFinished() const;
bool isRunning() const;
void requestInterruption();
bool isInterruptionRequested() const;
void setStackSize(uint stackSize);
uint stackSize() const;
void exit(int retcode = 0);
QAbstractEventDispatcher *eventDispatcher() const;
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher);
bool event(QEvent *event);
public Q_SLOTS:
void start(Priority = InheritPriority);
void terminate();
void quit();
public:
// default argument causes thread to block indefinetely
bool wait(unsigned long time = ULONG_MAX);
static void sleep(unsigned long);
static void msleep(unsigned long);
static void usleep(unsigned long);
Q_SIGNALS:
void started(
#if !defined(Q_QDOC)
QPrivateSignal
#endif
);
void finished(
#if !defined(Q_QDOC)
QPrivateSignal
#endif
);
protected:
virtual void run();
int exec();
static void setTerminationEnabled(bool enabled = true);
protected:
QThread(QThreadPrivate &dd, QObject *parent = 0);
private:
Q_DECLARE_PRIVATE(QThread)
friend class QCoreApplication;
friend class QThreadData;
};
开启线程:继承QThread的子线程只有 run 方法运行在新线程中,不能直接调用run 开启函数,start()开启线程。
结束线程:
可以通过调用exit()或quit()来停止线程。在极端情况下,你可能要强行terminate()结束线程。
二、例子
1.继承QThread ,重实现run
最后
以上就是瘦瘦铃铛为你收集整理的《C/C++ QT 多线程总结三》Qt多线程的全部内容,希望文章能够帮你解决《C/C++ QT 多线程总结三》Qt多线程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复