?? qthread_p.h
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QTHREAD_P_H#define QTHREAD_P_H//// W A R N I N G// -------------//// This file is not part of the Qt API. It exists for the convenience// of QAbstractItemModel*. This header file may change from version// to version without notice, or even be removed.//// We mean it.////#include "qplatformdefs.h"#include "QtCore/qthread.h"#include "QtCore/qmutex.h"#include "QtCore/qstack.h"#include "QtCore/qwaitcondition.h"#include "private/qobject_p.h"class QAbstractEventDispatcher;class QEventLoop;class QPostEvent{public: QObject *receiver; QEvent *event; inline QPostEvent() : receiver(0), event(0) { } inline QPostEvent(QObject *r, QEvent *e) : receiver(r), event(e) { }};class QPostEventList : public QList<QPostEvent>{public: int recursion; QMutex mutex; inline QPostEventList() : QList<QPostEvent>(), recursion(0) { }};class Q_CORE_EXPORT QThreadData{ QAtomic _ref;public: QThreadData(int initialRefCount = 1); ~QThreadData(); static QThreadData *current(); static QThreadData *get2(QThread *thread); void ref(); void deref(); QThread *thread; bool quitNow; QAbstractEventDispatcher *eventDispatcher; QStack<QEventLoop *> eventLoops; QPostEventList postEventList; bool canWait; void **tls;};#ifndef QT_NO_THREADclass QThreadPrivate : public QObjectPrivate{ Q_DECLARE_PUBLIC(QThread)public: QThreadPrivate(QThreadData *d = 0); ~QThreadPrivate(); mutable QMutex mutex; bool running; bool finished; bool terminated; uint stackSize; QThread::Priority priority; static QThread *threadForId(int id);#ifdef Q_OS_UNIX pthread_t thread_id; QWaitCondition thread_done; static void *start(void *arg); static void finish(void *arg);#endif#ifdef Q_OS_WIN32 HANDLE handle; unsigned int id; int waiters; bool terminationEnabled, terminatePending; static unsigned int __stdcall start(void *); static void finish(void *, bool lockAnyway=true);#endif // Q_OS_WIN32 QThreadData *data; static void createEventDispatcher(QThreadData *data);};// thread wrapper for the main() threadclass QAdoptedThread : public QThread{ Q_DECLARE_PRIVATE(QThread)public: QAdoptedThread(QThreadData *data = 0); ~QAdoptedThread(); void init(); static QThread *createThreadForAdoption();private: inline void run() { // this function should never be called, it is implemented // only so that we can instantiate the object qFatal("QAdoptedThread::run(): Internal error, this implementation should never be called."); }};#else // QT_NO_THREADclass QThreadPrivate : public QObjectPrivate{public: QThreadPrivate() : data(new QThreadData) {} ~QThreadPrivate() { delete data; } QThreadData *data; static void setCurrentThread(QThread*) {} static QThread *threadForId(int) { return QThread::currentThread(); } static void createEventDispatcher(QThreadData *data); Q_DECLARE_PUBLIC(QThread)};#endif // QT_NO_THREAD#endif // QTHREAD_P_H
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -