我使用FreeOnTerminate := true
刪除了它,並將它明確設置爲false,但是現在每次嘗試顯式釋放線程時都會鎖定代碼。我確定在Free
聲明發生鎖定。爲什麼當我在線程中調用Free時程序掛起?
對於線程進程的最後一步,我向主對象中創建的窗口句柄發送消息,以表示「完成」。在那裏我正在舉辦一個活動,然後免費。爲什麼會發生?
我使用FreeOnTerminate := true
刪除了它,並將它明確設置爲false,但是現在每次嘗試顯式釋放線程時都會鎖定代碼。我確定在Free
聲明發生鎖定。爲什麼當我在線程中調用Free時程序掛起?
對於線程進程的最後一步,我向主對象中創建的窗口句柄發送消息,以表示「完成」。在那裏我正在舉辦一個活動,然後免費。爲什麼會發生?
我認爲這是一個典型的多線程死鎖。
當你的線程通過sendmessage發送完成信號時,線程會等待sendmessage返回,然後它將執行任何其他操作(例如,免費過程)。同時,在完成事件並處理線程的sendmessage之前,您的主線程正在等待線程釋放。
您是否嘗試過使用postmessage而不是立即返回並且不等待結果?
使用PostMessage做到了。謝謝! – Glenn1234
我認爲你需要顯示釋放線程的代碼,以及在線程中執行的代碼。 –
這聽起來像是等待免費的主線程和等待消息處理的線程之間的死鎖,這不會發生,因爲主線程正在等待... –