如何等待函數執行完畢在繼續下行程式 |
答題得分者是:carstyc
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
現在的問題是當第一個發音還沒有結束,第二個發音就已經跳過了
Application->ProcessMessages(); 指令 但是不加入,就無法更新畫面也無法中斷 不知道有人可以指點一下 如何等待EN_Speech(ENStr); 函數發音完成,再繼續下各發音? [code cpp] AnsiString ENStr,GBStr; GetDataADO->Close(); GetDataADO->SQL->Clear(); GetDataADO->SQL->Add("SELECT TOP " IntToStr(CSE2->Value) " en_text,ch_text FROM eng ORDER BY Rnd(id)"); GetDataADO->Open(); while(IntBuff) { for(int i=0;i { //Sleep(st); ENStr = GetDataADO->Fields->Fields[0]->AsString; GBStr = GetDataADO->Fields->Fields[1]->AsString; ENGString->Caption = ENStr; BIGString->Caption = GBStr; CalPos(0); if(CB1->Checked) { EN_Speech(ENStr); Sleep(st); } if(CB2->Checked) { GB_Speech(ENStr); Sleep(st); } if(CB3->Checked) { GB_Speech(GBStr); Sleep(st); } if(!GetDataADO->Eof) GetDataADO->Next(); if(!IntBuff) break; Application->ProcessMessages(); } [/code] |
frontier
初階會員 發表:0 回覆:27 積分:30 註冊:2008-11-20 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
用執行緒是一個方法,但若你不想大改程式的話,可以試一下下列的方法
在for 迴圈一開始設一個 flag 為 true ,for 迴圈結束時設為 false。 而在 while 迴圈中一開始就判斷 flag 為 false 才進去做 for 迴圈。 記得一開始 flag 要設為 false。 這樣應該就能解決你的問題了。 [code cpp] AnsiString ENStr,GBStr; GetDataADO->Close(); GetDataADO->SQL->Clear(); GetDataADO->SQL->Add("SELECT TOP " IntToStr(CSE2->Value) " en_text,ch_text FROM eng ORDER BY Rnd(id)"); GetDataADO->Open(); while(IntBuff) { if (!flag) { flag =true; for(int i=0;iRecordCount;i ) { //Sleep(st); ENStr = GetDataADO->Fields->Fields[0]->AsString; GBStr = GetDataADO->Fields->Fields[1]->AsString; ENGString->Caption = ENStr; BIGString->Caption = GBStr; CalPos(0); if(CB1->Checked) { EN_Speech(ENStr); Sleep(st); } if(CB2->Checked) { GB_Speech(ENStr); Sleep(st); } if(CB3->Checked) { GB_Speech(GBStr); Sleep(st); } if(!GetDataADO->Eof) GetDataADO->Next(); if(!IntBuff) break; Application->ProcessMessages(); } flag =false; } [/code] ===================引 用 juneo 文 章=================== 現在的問題是當第一個發音還沒有結束,第二個發音就已經跳過了 Application->ProcessMessages(); 指令 但是不加入,就無法更新畫面也無法中斷 不知道有人可以指點一下 如何等待EN_Speech(ENStr); 函數發音完成,再繼續下各發音? [code cpp] AnsiString ENStr,GBStr; GetDataADO->Close(); GetDataADO->SQL->Clear(); GetDataADO->SQL->Add("SELECT TOP " IntToStr(CSE2->Value) " en_text,ch_text FROM eng ORDER BY Rnd(id)"); GetDataADO->Open(); while(IntBuff) { for(int i=0;iRecordCount;i ) { //Sleep(st); ENStr = GetDataADO->Fields->Fields[0]->AsString; GBStr = GetDataADO->Fields->Fields[1]->AsString; ENGString->Caption = ENStr; BIGString->Caption = GBStr; CalPos(0); if(CB1->Checked) { EN_Speech(ENStr); Sleep(st); } if(CB2->Checked) { GB_Speech(ENStr); Sleep(st); } if(CB3->Checked) { GB_Speech(GBStr); Sleep(st); } if(!GetDataADO->Eof) GetDataADO->Next(); if(!IntBuff) break; Application->ProcessMessages(); } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |