我明白直接殺死線程的問題(通過AfxEndThread或其他方式),並且我已經看到了使用CEvent對象的示例來發信號通知線程,然後讓線程自行清理。我遇到的問題是使用CEvent發信號通知線程似乎需要一個循環,您可以檢查線程是否在循環結束時發出信號。問題是,我的線程不會循環。它只是運行,處理可能需要一段時間(這就是爲什麼我想能夠阻止它)。另外,如果我只是殺死線程,我意識到我分配的任何東西都沒有機會清理自己。在我看來,就像我曾經使用過的任何當地人一樣,將堆放在堆上的東西也無法清理自己。是這樣嗎?停止MFC線程
Q
停止MFC線程
2
A
回答
0
您的線程是否退出?如果是這樣,您可以在退出時在線程中設置一個事件,讓主進程通過waitforsingleevent等待該事件。這是最好的做法,因爲主進程在關閉時不會鎖定。在超時事件中,通過AfxKillThread終止線程。不過,您必須確定合理的超時時間。
既然你不循環線程,這似乎是唯一的方法來做到這一點。當然,你可以在主進程中設置一個布爾標誌,並讓線程定期檢查這個標誌,但是你的線程代碼將會被「if(!canRun)return」所佔據。類型代碼。
如果線程永不退出,那麼AfxKillThread/AfxTerminateThread是停止線程的唯一方法。
0
當地人將被放置在堆棧上,因此,將被釋放強制關閉線程(我認爲)。析構函數不會被調用,並且線程持有的任何關鍵部分都不會被釋放。
但是,如果線程只處理棧中的簡單數據類型,那麼這是一件安全的事情。
2
這裏沒有祕密的魔法知識。
只需在整個功能代碼中定期檢查事件對象,並認爲它可以安全退出。
相關問題
- 1. 如何停止MFC中的主線程和等待子線程
- 2. 停止線程
- 3. 停止線程
- 4. 停止線程
- 5. MFC:從刪除輸入指針到它ControllingFunction停止線程
- 6. 暫停和停止線程
- 7. HowTo-線程停止
- 8. Android:停止線程
- 9. 停止線程onPause
- 10. JavaFX停止線程
- 11. 如何停止線程當Tomcat停止
- 12. MFC中的工作線程終止
- 13. 程序不停止線程
- 14. 如何在主線程停止/暫停線程/ Activity在android中暫停/停止?
- 15. 從線程MFC
- 16. 停止從主線程主線程
- 17. tKinter多線程停止線程
- 18. 從其他線程停止線程
- 19. 從父線程終止工作者線程 - MFC
- 20. 線程不會停止
- 21. 停止線程窗口
- 22. 如何停止線程?
- 23. 如何停止Java線程?
- 24. 無法停止線程
- 25. 啓動停止的線程?
- 26. 線程停止執行
- 27. 無法停止android線程
- 28. Windows Form OnClosing停止線程
- 29. 無法停止線程onBackPressed
- 30. 停止我的線程