簡體   English   中英

我如何知道線程是否在Windows CE下暫停

[英]How do i know if a thread is suspended under Windows CE

我可以使用C或Visual C ++在Windows CE下獲取線程掛起計數,而無需調用resume或suspend函數嗎? 我能看到的唯一方法就是這樣

int Count = SuspendThread(ThreadHandle);  
ResumeThread(ThreadHandle);

這有幾個問題,首先,我寧願不掛起線程,其次,如果線程正在運行內核代碼,掛起可能會失敗。 我可以解決這個問題,但我覺得應該有更優雅的解決方案。 我也可以用它來反轉它

int Count = ResumeThread(ThreadHandle);
SuspendThread(ThreadHandle);  

但這有類似的問題。 從句柄獲取掛起計數的任何好的替代方法?

我有一個綜合解決方案。 使用WaitForSingleObject()來確定線程是否被掛起。

如果沒有暫停,暫停計數顯然為0。

如果它被掛起,則可以安全地調用SuspendThread()來獲取掛起計數。 由於它已經暫停,你不會拖延任何東西。

你不應該在任何平台上暫停任何線程。

您應該在線程代碼中添加明確等待標志在允許繼續之前發出信號的同步點。 通過這種方式,您可以知道它將被暫停的位置,或者至少知道它將在安全點暫停。

對於任何程序員,應該從任何平台上徹底禁止對線程的以下操作:

  • 暫停
  • 恢復(因為如果你不能掛起線程就不需要它)
  • 殺/中止

你永遠不應該強行將你的意志強加於外線。 您無法保證它正在做什么,它當前鎖定了哪種資源。

始終以協作模式編寫線程。 你的線程應該意識到它的周圍環境,並讓外界的願望有序地退出,或者暫停直到它能夠安全地繼續下去。

即使是活動中的線程,你仍然會收到一個WAIT_TIMEOUT結果,這是因為線程僅在完成時發出信號,而不是在它們運行時發出信號。

說WaitForSingleObject(hThread,INFINITE)等待線程完成。

可能使用WaitForSingleObject,您可以檢查線程是否被掛起但是您無法檢索掛起計數器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM