我使用CreateThread然後TerminateThread取消線程。看起來堆棧空間仍然被分配。有沒有辦法解決這個問題?我沒有使用任何形式的動態內存調用,如malloc/new。線程不必優雅地退出。 10條線程留下了高達5MB的內存!線程都在代碼的不同部分,那麼是否有一種簡單的方法來實現一個線程間通信系統,它可以告訴他們所有的退出,並因此調整堆棧的方向?CreateThread其次TerminateThread留下了很多內存
0
A
回答
11
在大多數情況下,您應該使用而不是使用TerminateThread()
。如果您在應用程序中創建新線程,則有責任確保這些線程正常退出。當您使用TerminateThread()
時,可能會留下各種資源,因爲此功能只是在不調用清理功能的情況下終止線程。
你應該做的是利用事件(或其他信號的方法)要告訴你的線程他們應該關閉。當線程在內部接收到消息時(事件發信號或等待過期等),線程函數可以在內部清除並返回。這樣你就可以正確退出你的線程,不會留下任何混亂。
3
您的主線程上的一個非自動重置事件和一個WaitForMultipleObjects將執行您想要的操作。如果發現自己超過64個併發工作線程,則必須重新工具才能使用其他方法,例如非自動重置事件和信號量。實際上有幾十種方法可以解決這個問題,並且在整個互聯網論壇上有無數的例子,以及MS在Visual Studio發行版中的例子。從那些開始。
相關問題
- 1. Rails:留下很多代碼
- 2. 很多相同的值,如何只留下其中一個
- 3. 當我用大量數據提出很多請求後,排氣給我留下了內存異常
- 4. CUDA:寫入共享內存increses內核時執行了很多
- 5. DataSet - RowChanged事件引發了很多次?
- 6. declar函數中使用了很多次
- 7. Su許可問了很多次
- 8. (很多)UIWebView內存泄漏
- 9. CreateThread()有多昂貴?
- 10. 如何確定爲我的程序留下了多少虛擬內存?
- 11. JQuery:在很多毫秒內再次按下按鈕
- 12. 在Python中一次將很多圖像讀入內存openCV
- 13. 爲什麼New Relic吃了很多tomcat的內存?
- 14. 應用程序中分配了很多內存,如何解決?
- 15. 的Tomcat打開了很多實例的內存
- 16. 很多域=內存使用量過多?
- 17. Erlang真的很快,因爲它引發了很多內存拷貝?
- 18. 緩存鎖定了很多進程?
- 19. TransactionScope錯誤保存了很多信息
- 20. 下載很多大文件時iOS內存警告
- 21. 使用loadNibNamed會留下內存泄漏
- 22. 一次寫入多次讀取內存
- 23. 確定在w3wp.exe中保留了誰/保留了5.5 GB的虛擬內存
- 24. PHP內存使用率 - 是1.5MB很多?
- 25. gwt編譯需要很多堆內存
- 26. iPhone內存泄露(很多分配)
- 27. 防止UIWebView分配給很多內存
- 28. lsass.exe cousumes很多內存和CPU
- 29. 刪除重複多次,但留下第一次出現的ID
- 30. NSOperationQueue會保留在內存中多久?
5MB爲什麼很重要?你確定你不是間接使用malloc:即使'printf'也可以使用它。而你的問題是操作系統的依賴。 –