<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # QThread Class Reference ## [[QtCore](index.htm) module] 在QThread中的類提供了一個平臺無關的方式來管理線程。[More...](#details) 繼承[QObject](qobject.html)。 ### Types * `enum Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority, ..., InheritPriority }` ### Methods * `__init__ (self, QObject?parent?=?None)` * `int exec_ (self)` * `exit (self, int?returnCode?=?0)` * `bool isFinished (self)` * `bool isRunning (self)` * `Priority priority (self)` * `quit (self)` * `run (self)` * `setPriority (self, Priority?priority)` * `setStackSize (self, int?stackSize)` * `int stackSize (self)` * `start (self, Priority?priority?=?QThread.InheritPriority)` * `terminate (self)` * `bool wait (self, int?msecs?=?ULONG_MAX)` ### Static Methods * `QThread currentThread ()` * `int currentThreadId ()` * `int idealThreadCount ()` * `msleep (int)` * `setTerminationEnabled (bool?enabled?=?True)` * `sleep (int)` * `usleep (int)` * `yieldCurrentThread ()` ### Qt Signals * `void finished ()` * `void started ()` * `void terminated ()` * * * ## Detailed Description 在QThread中的類提供了一個平臺無關的方式來管理線程。 一個QThread中對象管理程序中控制一個線程。 QThreads開始執行的[run](qthread.html#run)( ) 。默認情況下,[run](qthread.html#run)( )通過調用啟動事件循環[exec_](qthread.html#exec)( )并運行里面的線程Qt的事件循環。 您可以使用它們移動到線程使用工作對象[QObject.moveToThread](qobject.html#moveToThread)( ) 。 ``` class Worker : public [QObject](qobject.html) { Q_OBJECT QThread workerThread; public slots: void doWork(const [QString](qstring.html) &parameter) { // ... emit resultReady(result); } signals: void resultReady(const [QString](qstring.html) &result); }; class Controller : public [QObject](qobject.html) { Q_OBJECT QThread workerThread; public: Controller() { Worker *worker = new Worker; worker->moveToThread(&workerThread); connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater())); connect(this, SIGNAL(operate([QString](qstring.html))), worker, SLOT(doWork([QString](qstring.html)))); connect(worker, SIGNAL(resultReady([QString](qstring.html))), this, SLOT(handleResults([QString](qstring.html)))); workerThread.start(); } ~Controller() { workerThread.quit(); workerThread.wait(); } public slots: void handleResults(const [QString](qstring.html) &); signals: void operate(const [QString](qstring.html) &); }; ``` 那么工人的插槽內的代碼將在一個單獨的線程中執行。但是,你可以自由的工人插槽連接到任何信號,任何物體,在任何線程。它是安全的連接在不同的線程信號和槽,這要歸功于一個叫機制[queued connections](qt.html#ConnectionType-enum)。 另一種方法,使代碼運行在一個單獨的線程,是子類化QThread中,并重新實現[run](qthread.html#run)( ) 。例如: 在這個例子中,該線程將退出運行函數返回之后。不會有任何事件循環運行的線程,除非你調用[exec_](qthread.html#exec)( ) 。 重要的是要記住,一個QThread中的對象通常生活在它被創建的線程,而不是在它管理的線程是很重要的。這經常被忽視的細節是指一個QThread中的插槽將在其家鄉線程的上下文中執行,而不是在它管理的線程的上下文中。出于這個原因,在QThread中的子類實現新的插槽是容易出錯和氣餒。 **Note:**如果你與對象交互,使用任何比排隊的信號/插槽連接(例如直接函數調用)等技術,那么就需要平時多線程的預防措施才能作出。 **Note:**這是不可能改變GUI對象的線程關聯,它們必須保持在主線程中。 ### Managing threads QThread中會通過當線程是一個信號notifiy你[started](qthread.html#started)( )[finished](qthread.html#finished)()和[terminated](qthread.html#terminated)( ) ,也可以使用[isFinished](qthread.html#isFinished)()和[isRunning](qthread.html#isRunning)( )來查詢線程的狀態。 你可以通過調用停止線程[exit](qthread.html#exit)()或[quit](qthread.html#quit)( ) 。在極端情況下,你可能要強行[terminate](qthread.html#terminate)( )正在執行的線程。但是,這樣做是危險的,氣餒。請閱讀文檔[terminate](qthread.html#terminate)()和[setTerminationEnabled](qthread.html#setTerminationEnabled)( )的詳細信息。 在Qt 4.8起,它可以釋放生活在剛剛結束的線程對象,通過連接[finished](qthread.html#finished)()信號來[QObject.deleteLater](qobject.html#deleteLater)( ) 。 使用[wait](qthread.html#wait)()來阻塞調用線程,直到其他線程執行完畢(或者直到指定的時間已經過去了) 。 靜態函數[currentThreadId](qthread.html#currentThreadId)()和[currentThread](qthread.html#currentThread)( )返回標識當前正在執行的線程。前者返回該線程的平臺特定的ID ,后者返回一個QThread中的指針。 要選擇你的線程將給予(如確定該命令的名稱`ps -L`在Linux上,例如) ,你可以調用[setObjectName()](qobject.html#objectName-prop)前啟動線程。如果你不打電話[setObjectName()](qobject.html#objectName-prop),給你的線程的名稱將是你的線程對象的運行時類型(例如類名,`"RenderThread"`在的情況下[Mandelbrot Example](index.htm),因為這是QThread中的子類的名稱) 。請注意,這是目前不可用發布版本的Windows 。 QThread中還提供了靜態的,平臺獨立的睡眠功能:[sleep](qthread.html#sleep)( )[msleep](qthread.html#msleep)()和[usleep](qthread.html#usleep)( )允許完整秒,毫秒和微秒分辨率分別。 **Note:** [wait](qthread.html#wait)( )和[sleep](qthread.html#sleep)()函數應該是不必要的,一般的,因為Qt是事件驅動型的框架。而不是[wait](qthread.html#wait)( ) ,考慮偵聽[finished](qthread.html#finished)()信號。取而代之的是[sleep](qthread.html#sleep)( )函數,可以考慮使用[QTimer](qtimer.html)。 * * * ## Type Documentation ``` QThread.Priority ``` 該枚舉類型表示操作系統應該如何安排新創建的線程。 | Constant | Value | Description | | --- | --- | --- | | `QThread.IdlePriority` | `0` | 定沒有其他線程正在運行時才能使用。 | | `QThread.LowestPriority` | `1` | 定頻率低于LowPriority 。 | | `QThread.LowPriority` | `2` | 定頻率低于NormalPriority 。 | | `QThread.NormalPriority` | `3` | 操作系統的默認優先級。 | | `QThread.HighPriority` | `4` | 預計往往比NormalPriority 。 | | `QThread.HighestPriority` | `5` | 預計往往高優先。 | | `QThread.TimeCriticalPriority` | `6` | 盡可能多地如期舉行。 | | `QThread.InheritPriority` | `7` | 使用相同的優先級創建線程。這是默認的。 | * * * ## Method Documentation ``` QThread.__init__ (self, QObject?parent?=?None) ``` 該_parent_的說法,如果不是沒有,原因_self_通過Qt的,而不是PyQt的擁有。 構造一個新的[QThread](qthread.html)管理一個新的線程。該_parent_采取所有權[QThread](qthread.html)。該線程不會開始執行,直到[start](qthread.html#start)()被調用。 **See also** [start](qthread.html#start)( ) 。 ``` QThread QThread.currentThread () ``` [](qthread.html) [返回一個指針,指向一個](qthread.html)[QThread](qthread.html)該公司管理當前執行的線程。 ``` int QThread.currentThreadId () ``` 返回當前正在執行的線程的線程句柄。 **Warning:**此函數返回的句柄用于內部目的,不應在任何應用程序代碼不能使用。 **Warning:**在Windows中,返回值是一個偽句柄為當前線程。它不能被用來進行數值比較。也就是說,這個函數返回由Win32函數getCurrentThread ( )返回的Win32函數getCurrentThreadId返回的DWORD ( Windows的線程ID ) ( ) ,而不是句柄( Windows的線程句柄) 。 ``` int QThread.exec_ (self) ``` 進入事件循環并等待直到[exit](qthread.html#exit)()被調用,返回傳遞給該值[exit](qthread.html#exit)( ) 。返回的值是0,如果[exit](qthread.html#exit)( )通過調用[quit](qthread.html#quit)( ) 。 有必要調用這個函數來啟動事件處理。 **See also** [quit](qthread.html#quit)()和[exit](qthread.html#exit)( ) 。 ``` QThread.exit (self, int?returnCode?=?0) ``` 講述了線程的事件循環退出與返回代碼。 調用該函數后,線程離開事件循環,并從調用返回[QEventLoop.exec](qeventloop.html#exec)( ) 。該[QEventLoop.exec](qeventloop.html#exec)( )函數返回_returnCode_。 按照慣例,_returnCode_0表示成功,非零值表示錯誤。 請注意,與同名的C庫函數,這個函數_does_返回給調用者 - 它是事件處理,停止。 沒有QEventLoops將不再啟動該線程,直到[QThread.exec](qthread.html#exec)( )再次被調用。如果在事件循環[QThread.exec](qthread.html#exec)( )是不是下次調用運行,那么[QThread.exec](qthread.html#exec)( )也將立即返回。 **See also** [quit](qthread.html#quit)()和[QEventLoop](qeventloop.html)。 ``` int QThread.idealThreadCount () ``` 返回可在系統上運行的線程數理想。這樣做是查詢處理器內核的數量,實際和邏輯,在系統中。該函數返回-1,如果無法檢測到處理器內核的數量。 ``` bool QThread.isFinished (self) ``` 返回True如果線程完成,否則返回False 。 **See also** [isRunning](qthread.html#isRunning)( ) 。 ``` bool QThread.isRunning (self) ``` 返回如果線程正在運行,則為True,否則返回False。 **See also** [isFinished](qthread.html#isFinished)( ) 。 ``` QThread.msleep (int) ``` 強制當前線程睡眠_msecs_毫秒。 **See also** [sleep](qthread.html#sleep)()和[usleep](qthread.html#usleep)( ) 。 ``` Priority QThread.priority (self) ``` [ 返回的優先級為一個正在運行的線程。如果線程沒有運行,這個函數返回`InheritPriority`。 這個函數是Qt 4.1中引入。 ](qthread.html#Priority-enum) [**See also**](qthread.html#Priority-enum) [Priority](qthread.html#Priority-enum),[setPriority](qthread.html#setPriority)()和[start](qthread.html#start)( ) 。 ``` QThread.quit (self) ``` 這種方法也是一個Qt槽與C + +的簽名`void quit()`。 講述了線程的事件循環退出,返回代碼為0(成功) 。等效于調用QThread.exit ( 0 ) 。 這個函數不執行任何操作,如果線程沒有一個事件循環。 **See also** [exit](qthread.html#exit)()和[QEventLoop](qeventloop.html)。 ``` QThread.run (self) ``` 的起點的線。后調用[start](qthread.html#start)( ) ,新創建的線程調用該函數。默認實現調用[exec_](qthread.html#exec)( ) 。 您可以重新實現這個功能,方便先進的線程管理。從該方法返回將結束線程的執行。 **See also** [start](qthread.html#start)()和[wait](qthread.html#wait)( ) 。 ``` QThread.setPriority (self, Priority?priority) ``` 該函數設置_priority_對于一個正在運行的線程。如果線程沒有運行,這個函數不執行任何操作并立即返回。使用[start](qthread.html#start)()開始一個特定的優先級的線程。 該_priority_參數可以在任何值`QThread.Priority`枚舉除`InheritPriorty`。 的效果_priority_參數是依賴于操作系統的調度策略。特別是,本_priority_在不支持線程的優先級(如在Linux上,看到http://linux.die.net/man/2/sched_setscheduler更多的細節)系統將被忽略。 這個函數是Qt 4.1中引入。 **See also** [Priority](qthread.html#Priority-enum),[priority](qthread.html#priority)()和[start](qthread.html#start)( ) 。 ``` QThread.setStackSize (self, int?stackSize) ``` 設置為線程的最大堆棧大小_stackSize_。如果_stackSize_大于零,最大的堆棧大小設置為_stackSize_字節,否則的最大堆棧大小是自動由操作系統決定的。 **Warning:**大多數操作系統都放在線程堆棧尺寸最小和最大限制。該線程將無法啟動,如果堆棧大小是超出這些限制。 **See also** [stackSize](qthread.html#stackSize)( ) 。 ``` QThread.setTerminationEnabled (bool?enabled?=?True) ``` 啟用或禁用的基礎上,終止當前線程的_enabled_參數。線程必須已經啟動了[QThread](qthread.html)。 When _enabled_是假的,終止被禁用。未來的呼叫[QThread.terminate](qthread.html#terminate)( )會立即返回而不影響。相反,終止被推遲到終端已啟用。 When _enabled_誠然,終端已啟用。未來的呼叫[QThread.terminate](qthread.html#terminate)( )通常會終止線程。如果終止已推遲(即[QThread.terminate](qthread.html#terminate)( )被調用終止禁用) ,這個函數將終止調用線程_immediately_。注意,該函數不會在這種情況下返回。 **See also** [terminate](qthread.html#terminate)( ) 。 ``` QThread.sleep (int) ``` 強制當前線程睡眠_secs_秒。 **See also** [msleep](qthread.html#msleep)()和[usleep](qthread.html#usleep)( ) 。 ``` int QThread.stackSize (self) ``` 返回線程的最大堆棧大小(如果設置有[setStackSize](qthread.html#setStackSize)( ) ) ;否則返回零。 **See also** [setStackSize](qthread.html#setStackSize)( ) 。 ``` QThread.start (self, Priority?priority?=?QThread.InheritPriority) ``` 這種方法也是一個Qt槽與C + +的簽名`void start(QThread::Priority = QThread.InheritPriority)`。 通過調用開始執行線程[run](qthread.html#run)( ) 。該操作系統將根據安排線程_priority_參數。如果線程已經在運行,這個函數不執行任何操作。 的效果_priority_參數是依賴于操作系統的調度策略。特別是,本_priority_在不支持線程的優先級(如在Linux上,看到http://linux.die.net/man/2/sched_setscheduler更多的細節)系統將被忽略。 **See also** [run](qthread.html#run)()和[terminate](qthread.html#terminate)( ) 。 ``` QThread.terminate (self) ``` 這種方法也是一個Qt槽與C + +的簽名`void terminate()`。 終止線程的執行。該線程可能會或可能不會被立即終止,取決于操作系統的調度策略。監聽[terminated](qthread.html#terminated)()信號,或使用[QThread.wait](qthread.html#wait)( )后終止( ) ,以確保萬無一失。 當線程終止時,等待完成線程的所有線程將被喚醒。 **Warning:**這個函數是危險的,它的使用是氣餒。該線程可以在它的代碼路徑中的任何一點被終止。線程可以同時修改數據被終止。沒有機會的線程后自行清理,解鎖任何持有的互斥鎖,等等,總之,使用此功能只有在絕對必要的。 終端可以明確地啟用或禁用通過調用[QThread.setTerminationEnabled](qthread.html#setTerminationEnabled)( ) 。調用此函數,而終止在終止傷殘結果被推遲,直到重新啟用終止。看到的文檔[QThread.setTerminationEnabled](qthread.html#setTerminationEnabled)( )獲取更多信息。 **See also** [setTerminationEnabled](qthread.html#setTerminationEnabled)( ) 。 ``` QThread.usleep (int) ``` 強制當前線程睡眠_usecs_微秒。 **See also** [sleep](qthread.html#sleep)()和[msleep](qthread.html#msleep)( ) 。 ``` bool QThread.wait (self, int?msecs?=?ULONG_MAX) ``` 塊的線程,直到下列任一條件滿足: * The thread associated with this [QThread](qthread.html) object has finished execution (i.e. when it returns from [run](qthread.html#run)()). This function will return true if the thread has finished. It also returns true if the thread has not been started yet. * _time_ milliseconds has elapsed. If _time_ is ULONG_MAX (the default), then the wait will never timeout (the thread must return from [run](qthread.html#run)()). This function will return false if the wait timed out. 這提供了類似的功能在POSIX`pthread_join()`功能。 **See also** [sleep](qthread.html#sleep)()和[terminate](qthread.html#terminate)( ) 。 ``` QThread.yieldCurrentThread () ``` 收益率執行當前線程到另一個線程可運行的,如果有的話。注意,操作系統決定哪個線程切換。 * * * ## Qt Signal Documentation ``` void finished () ``` 這是該信號的默認超載。 當線程執行完這個信號被發射。 **See also** [started](qthread.html#started)()和[terminated](qthread.html#terminated)( ) 。 ``` void started () ``` 這是該信號的默認超載。 當線程開始執行這個信號被發射。 **See also** [finished](qthread.html#finished)()和[terminated](qthread.html#terminated)( ) 。 ``` void terminated () ``` 這是該信號的默認超載。 當線程被終止這個信號被發射。 **See also** [started](qthread.html#started)()和[finished](qthread.html#finished)( ) 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看