[問題] 如何重新啟動CreateThread?

看板C_and_CPP (C/C++)作者 (Josh Bourne)時間15年前 (2011/03/08 12:48), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
開發平台(Platform): VC++ (MFC) 問題(Question):我使用MFC寫影音播放程式 裡面有用到CreateThread 跑4個不同的執行緒 現在當我拖曳slider後想要關掉這四個執行緒 並且重新啟動這四個執行緒,用了CloseHandle() 好像沒什麼效果 如果我沒插入SuspendThread() 程式會出現記憶體出錯 可是如果有插入又需要拉兩次slider 才可以重新啟動執行緒 請問有沒有更好的關掉執行緒在重新啟動的函式 不是把整個程式關掉的函式,先謝謝各位解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.112.5

03/08 13:02, , 1F
反過來想,在執行緒中把函式reload,而不是reload執行緒
03/08 13:02, 1F

03/08 13:12, , 2F
要結束Thread請讓它自行結束,最簡單的就是設個flag讓它
03/08 13:12, 2F

03/08 13:12, , 3F
自行return
03/08 13:12, 3F

03/08 16:24, , 4F
你在A執行緒強制關B執行緒的話,B裡的物件不能正常解構
03/08 16:24, 4F

03/08 16:24, , 5F
所以要在B執行緒裡設個檢查,判斷要不要自己結束函數。
03/08 16:24, 5F

03/08 16:26, , 6F
CloseHandle()的作用是關掉該執行緒物件的某個Handle
03/08 16:26, 6F

03/08 16:26, , 7F
執行緒本身可以有好幾個Handle,所以你去關不能讓他停
03/08 16:26, 7F

03/08 17:07, , 8F
其實用 CreateThread 本身就很容易造成 memory leak
03/08 17:07, 8F
文章代碼(AID): #1DTRKJCH (C_and_CPP)
文章代碼(AID): #1DTRKJCH (C_and_CPP)