大家好,我有一個疑難問題,咨詢一下大家。我有一個程式,判斷新創建的執行緒,是否掛起。如果掛起的話,彈一個提示框,表示條件滿足。但是我明明掛起了程式,提示框就是沒彈。于是做除錯,結果卻很意外,只要是除錯的時候,程式就和預計的一模一樣,彈出了提示框。但只要是運行狀態,提示框就沒有,奇怪的很。這是怎么回事啊,除錯和運行程式并沒有變化啊,也不應該有區別啊。AfxMessageBox和MessageBox也經常用,也沒有什么例外情況啊。從來沒遇到過這種怪事,誰能告訴我怎么回事呢?下面是代碼:
彈不彈提示框不重要,提示框只是告訴我程式走到哪了,關鍵是為什么會有不同。IsThreadSuspend這個函式我是驗證過的,在其他程式直接運行,是正常的。
g_pThread->SuspendThread(); //掛起執行緒
int nPid = _getpid();
BOOL bRET = IsThreadSuspend(nPid, g_pThread->m_nThreadID); //判斷執行緒掛起的函式,之前驗證過,沒有問題
if (bRET)
{
AfxMessageBox("執行緒被掛起了!");
MessageBox("執行緒被掛起了!");
}
uj5u.com熱心網友回復:
This function is primarily designed for use by debuggers. It is not intended to be used for thread synchronization.uj5u.com熱心網友回復:
1. 我之前做過實驗。有兩個程式,一個程式里,一個新執行緒用SuspendThread()掛起了。另一個程式,用我后面的IsThreadSuspend函式判斷成功了啊。兩個程式分別是兩個行程。那這為什么就可以呢?
2. 如果你覺得SuspendThread函式不能用,那我要讓執行緒暫停,該怎么辦。
uj5u.com熱心網友回復:
搜索“SuspendThread()”uj5u.com熱心網友回復:
呼叫SuspendThread(),該函式的回傳值表示之前的掛起計數。uj5u.com熱心網友回復:
你說的掛起計數是在本程式內,那我要是在另外一個程式里作判斷呢。掛起計數不重要,我是想知道,為什么除錯和運行,程式顯示不一致。那我掛起到底成功了沒有。成功了為什么 IsThreadSuspend 這個函式沒有識別到
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/38772.html
標籤:界面
上一篇:串口控制元件變數沒有相關成員
