TThread 和 SpeedButton 所出現錯誤訊息 |
缺席
|
e_snare
一般會員 發表:26 回覆:35 積分:12 註冊:2004-03-14 發送簡訊給我 |
大家好
我用TThread來處理一段程式
用SpeedButton來開關COM PORT 當我的SpeedButton不是壓下時我的程式碼如下 2.MyThread->Terminate();
CloseHandle(我HANDLE的變數名稱); 當我壓下時做任何動作都正常,包括直接關閉程式也很正常!
但當我壓下再取消後,然後關閉程式就會出現
Project xxx.exe raised exception class EExternalException with message 'External exception C0000008. Process stopped. Use Step or Run to continue.
其實如果不是在撰寫模式下,也就是直接從檔案總管裡找出來執行是不會有這個
錯誤訊息的! 如果我在第2點只加MyThread->Terminate();不加CloseHandle(var);就不會有錯誤訊息,問題是這樣我再壓下SpeedButton時就會無法開啟COM PORT,就無法執行程式!
如果只加CloseHandle(var);不加MyThread->Terminate();會有相同錯誤! 其實兩個都加有時還會多一個錯誤訊息,什麼Thread Error:控制碼無效!
當我壓下正常運作然後取消壓下再次壓下時會出現!! 不知是否有人知道發生了什麼事? 對了,SpeedButton壓下時我有MyThread->Resume(); 發表人 - e_snare 於 2004/07/03 12:25:46
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
e_snare你好:
在執行完MyThread->Terminate();這一行的時候,Thread並不會馬上停止,Terminate()做的事情只是把變數Terminated設為True。(這時Thread還在進行) 因此,你之後馬上執行CloseHandle就會出問題(因為Thread還沒停,只要有用到這個Handle就會掛了) 修改的重點如下: 1.Terminate()後加上WaitFor(),就可以等待TThread真正的結束。但是Thread的寫法一定要注意常常檢查變數Terminated,一但發現Terminated變成True就要趕快結束。 2.把CloseHandle寫在Thread的destructor。不過可要記得設FreeOnTerminate
為True。 試試看能不能解決問題,不能的話再來看是那兒出問題
站上之前有不少版大討論過這類的文章,也可以看看。
|
e_snare
一般會員 發表:26 回覆:35 積分:12 註冊:2004-03-14 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
我也寫過COM PORT(Rs232)程式也用Thread處理資料運用交換機上 請試試 XXX.h public: // User declarations ReceiveData *receiveData; // Function of Thread XXX.Cpp 按下停止的Button receiveData->Suspend(); delete receiveData; // 停止Thread 按下起用的Button try { receiveData = new ReceiveData(false); receiveData->Resume(); // 啟用Thread } catch(...) { 執行不了訊息; } 請參考Andy Chang
------
Andy Chang |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
對不起,根據經驗法則,Rs232暫停是很重要的,e_snare不知你可有注意
,請參考
ReceiveData.Cpp
void __fastcall ReceiveData::Execute() { //---- Place thread code here ---- //Terminate(); while(!Terminated) { Synchronize(fsReceive); // 處理Rs232資料 Sleep(300); // 暫停0.3秒並不需要太精確 } }Andy Chang
------
Andy Chang |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |