本人新建了一個對話框專案,然后在程式里通過AFXbeginthread()函式新開了一個作業執行緒,在執行緒函式中使用定時器會報錯,不知道什么原因,在網上搜索說作業執行緒沒訊息機制,是不是在作業執行緒中不能使用定時器,要可以使用的話,怎么使用,希望有大牛們給點提示。
uj5u.com熱心網友回復:
定時器 中 AFXbeginthread()再 KillTimer 保證 定時器一次 AFXbeginthread()一次
uj5u.com熱心網友回復:
不能用定時器uj5u.com熱心網友回復:
執行緒中可以使用 timeSetEventuj5u.com熱心網友回復:
不能。MFC定時器從原理上需要執行緒訊息回圈機制支持,MFC中的主執行緒是UI執行緒,有訊息回圈機制,所以可以用; 自建執行緒屬作業者執行緒,沒有訊息回圈機制,不能用。
uj5u.com熱心網友回復:
可以的,需要自己建立訊息回圈,這個我做過。uj5u.com熱心網友回復:
作業執行緒中不能用定時器,你可以換個別的思路實作,比如在對話框界面開啟定時器,在定時器里定時設定標志位,在作業執行緒里查詢標志位實作定時間隔執行一段代碼,其他時間等待或做別的事。也可以用等待物件處理uj5u.com熱心網友回復:
執行緒實際就是個自己撰寫的“死回圈”函式(自己撰寫在某個條件觸發后退出死回圈),所以你可以在這個死回圈中采用sleep(...)等待,這個實際就是定時器了uj5u.com熱心網友回復:
子執行緒可以用SetWaitableTimer也可以在你主執行緒開定時器,時間到了就設定一個事件,然后子執行緒去等待這個事件。
uj5u.com熱心網友回復:
MFC定時器實際上默認是和一個視窗系結的,靠這個視窗的訊息回圈接收timer訊息,類似的機制還有CSocket等,如果一定要這樣做可以創建一個隱藏視窗,bind一下應該就可以了uj5u.com熱心網友回復:
在執行緒函式中使用定時器??? 隨什么要這么做呢轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/16963.html
標籤:進程/線程/DLL
上一篇:請教下C++中做埠轉發的問題
