全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:841
推到 Plurk!
推到 Facebook!

非同步流程控制的���_

尚未結案
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-22 20:34:55 IP:61.222.xxx.xxx 未訂閱
程式大略架構如下: void main() { CreateThread(呼叫th_fun); WaitforSingleObject(...); } ... thfun(...) { while(...) { int evt = GetEvt(); // catch event function switch(evt) case TDX_CONNECT://接通後產生的event case TDX_PLAY: //放音完發生的event case TDX_REC: //錄音完發生的event } } 整個程式的流程若為「接通」->「錄音」->「放音」->「錄音」->「掛斷」 若是同步模式,流程變得很簡單,一條鞭下來 ex: case TDX_CONNECT: Rec(); Play() Rec(); disconnect(); 但是非同步模式流程的控制變成要以偵測event為主,若以相同的方法安插代碼進去如下 case TDX_CONNECT: //第一步接通 Rec() ; //第二步接通後錄音 break; case TDX_PLAY: Rec(); //第四步放完音後錄音 break; case TDX_REC: Play(); //第三步錄完音後放音 break; 現在問題來了,第四步結束後,會發生TDX_REC 此event,此event下又去執行Play, Play()完後產生TDX_Play,又再一次執行Rec(),就這樣周而復始,生生不息 請問在非同步模式下程式的流程控制要怎麼設計呢? 謝謝!
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-24 18:43:05 IP:61.222.xxx.xxx 未訂閱
有個建議 你可以在你的抓取中斷裡增加一個紀錄步伐的變數 這樣便很容易的解決你的問題拉 你參考看看 < class="code"> int step; while(...) { int evt = GetEvt(); // catch event function switch(evt) case TDX_CONNECT://接通後產生的event step=1; case TDX_PLAY: //放音完發生的event step; if(step>3) << 這裡掛斷 case TDX_REC: //錄音完發生的event step; }
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-27 12:46:51 IP:61.222.xxx.xxx 未訂閱
感謝! 嗯,其實設flag這個方法也可以 不過假如程序一多的話,用flag也相對變複雜了
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-27 17:18:35 IP:140.135.xxx.xxx 未訂閱
asd98537您好:  抱歉,插花一下,請參考下面的連結,讓您的程式碼更容易閱讀 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39608">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39608 謝謝您的配合
系統時間:2024-06-24 20:27:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!