線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:662
推到 Plurk!
推到 Facebook!

關於執行緒及動態Form的衝突

尚未結案
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-22 11:03:30 IP:211.72.xxx.xxx 未訂閱
小弟的程式架構如下:    MainForm --> 執行緒 --> 機械動作副程式(.CPP) | | --> Debug Form(有include 執行緒及機械檔的.h) | | --> Check Form(有include 執行緒及機械檔的.h)    程序上有二種狀況: 1.程式執行有經過執行緒(此時執行緒在執行機械副程式的內容),然後暫停執 行緒( handwave -> Suspend(); //暫停執行緒),在從MainForm上執行Debug Form(此時Debug Form內容為執行機械副程式的單一副程式). 2.程式執行未經過執行緒(此時執行緒在執行),在從MainForm上執行Debug Form(此時Debug Form內容為執行機械副程式的單一副程式).    出現狀況: 有時會在Debug Form要執行內容或是執行機械副程式的單一副程式就會當機. 想請教各位大大 如果非得在Debug Form去執行機械副程式的單一副程式,是不是在Debug Form內不能直接呼叫機械副程式的單一副程式. 謝謝喔!!    程式節錄如下 MainForm: //--------------------------------------------------------------- void __fastcall TMainForm::Button1Click(TObject *Sender) //Start { ... handwave -> Resume(); //啟動執行緒 }    //--------------------------------------------------------------- void __fastcall TMainForm::Button9Click(TObject *Sender) //Stop { ... handwave -> Suspend(); //暫停執行緒 } //--------------------------------------------------------------- void __fastcall TMainForm::Button10Click(TObject *Sender) //Exit { int feelback = Application -> MessageBox("Exit?, Turn?","Exit",4+32); if (feelback == 6) {handwave -> Terminate(); //停止執行緒 Close(); } }    //--------------------------------------------------------------- void __fastcall TMainForm::Button5Click(TObject *Sender) //Debug { int debug = Application -> MessageBox("Debug?","除錯",4+32);    if(debug == 6) { MainForm -> Visible = false;    TDebug *Debug; Debug = new TDebug(Application); Debug -> Show(); } } //-------------------------------------------------------------    執行緒: void __fastcall Thandwave::Execute() { while(!Terminated) { if((status = Testitem1()) == FAIL)  { ... display_pass_fail = 0; //return fail goto run_exit; }    if((status = Testitem2()) == FAIL)  { ... display_pass_fail = 0; //return fail goto run_exit; }    display_pass_fail = 1;  run_exit : ; } }    Debug Form: void __fastcall TDebug::SpeedButton1Click(TObject *Sender) { ... if(this -> CheckBox1 -> Visible == true) { if(this -> CheckBox1 -> Checked == true) //當第一項被按下就執行 { Testitem1(); this -> Label3 -> Caption = MainForm -> Label52 ->Caption; } }    if(this -> CheckBox2 -> Visible == true) { if(this -> CheckBox2 -> Checked == true) //當第二項被按下就執行 { Testitem2(); this -> Label6 -> Caption = MainForm -> Label56 ->Caption; } } }    機械執行副程式: short Testitem1() { ... return(0); }    short Testitem2() { ... return(0); } < >< >
系統時間:2024-04-24 23:28:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!