在thread 中開啟 Form |
答題得分者是:RaynorPao
|
dieWelt
一般會員 ![]() ![]() 發表:2 回覆:2 積分:0 註冊:2007-11-20 發送簡訊給我 |
想請教各位高手,
我現在有三個視窗Form1, Form2, Form3. Form1是main form,我在Form1 的建構子中用 _beginthread( IntThread, 0, 0) 產生了一個thread; IntThread中,用WaitForSingleObject()來即時偵測由實體感測器(近接開關之類的)傳回來的異常訊息。 Form3則是用來顯示異常訊息用。 我希望不論在使用Form1或Form2時,如果偵測到感測器有訊號進來, 馬上能show出Form3,而Form3關閉之後,又能回到原先的視窗(Form1 or Form2)。 我原本在IntThread中,直接讓 Form3->Show(); 它能正常執行,但Form3關掉之後,都會發生錯誤(當掉),沒有辦法正常的回到原來的視窗。 請問在thread中,該如何做才能正常運作呢? 對thread的概念很不清楚,@_@a 感謝各位。 附上 IntThread() 程式碼 [code cpp] void IntThread(void* pArg) { int err = 0; while(true) { if( WaitForSingleObject(hEvent1[0], INFINITE) == WAIT_OBJECT_0) { unsigned short COSLData ; err = DIO_GetCOSLatchData(0, &COSLData); // 取得感測器狀態 if( COSLData != 0){ // button interrupt. Form3->InterrputError( COSLData ); Form3->Show(); } } }/* End of while-loop*/ _endthread(); } [/code] |
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
(1)絕大部分的 VCL 元件,包括 TForm 在內,都不是 Thread-Safe 的元件,不建議直接在 MainThread 以外的 Thread 裡面操作(因為結果往往無法預期)
(2)依據你的需求,可以利用 Timer 元件來達成,只要把 Interval 設小一點就可以了(例如: 100 or 10 ms) 相關參考文章: http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=49776
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
編輯記錄
RaynorPao 重新編輯於 2008-07-24 16:36:37, 註解 無‧
|
dieWelt
一般會員 ![]() ![]() 發表:2 回覆:2 積分:0 註冊:2007-11-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |