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

如何等待函數執行完畢在繼續下行程式

答題得分者是:carstyc
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-09 03:03:42 IP:140.114.xxx.xxx 訂閱
現在的問題是當第一個發音還沒有結束,第二個發音就已經跳過了
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]

frontier
初階會員


發表:0
回覆:27
積分:30
註冊:2008-11-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-09 08:10:21 IP:59.125.xxx.xxx 訂閱
用多執行緒來做發音的部分
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-07-09 09:02:03 IP:203.79.xxx.xxx 訂閱
用執行緒是一個方法,但若你不想大改程式的話,可以試一下下列的方法

在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]

編輯記錄
carstyc 重新編輯於 2009-07-09 09:06:15, 註解 無‧
carstyc 重新編輯於 2009-07-09 09:07:08, 註解 無‧
系統時間:2024-11-21 18:42:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!