非同步流程控制的���_ |
尚未結案
|
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
程式大略架構如下:
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 發送簡訊給我 |
有個建議 你可以在你的抓取中斷裡增加一個紀錄步伐的變數
這樣便很容易的解決你的問題拉
你參考看看 < 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 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |