TClientSocket與TTimer配合的問題 |
答題得分者是:gemi0305
|
kenbcb
中階會員 ![]() ![]() ![]() 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
請問各位:
程式功能:有一個command及二個echo(A,B),當送command時回A,但超過3秒時回應"no reponse",而一樣接收回應但不處理;echo(B)是server送出來的,無需送command ~請大家指導~謝謝! 這是我做的程式,不知錯在那
bool isTimeOut;
bool getResponse;
AnsiString text;
void __fastcall TfrmAdmin::Timer1Timer(TObject *Sender)
{
//Time Out process Timer1->Enabled = false;
if(!getResponse)
{
isTimeOut = true;
ShowMessage("Server no respond!");
}
} void __fastcall TfrmAdmin::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
//the function process data write to buffer by socket int len = Socket->ReceiveLength(); getResponse = true;
text = Socket->ReceiveText();
} void __fastcall TfrmAdmin::btnConnectClick(TObject *Sender)
{
//等待回應,超過3秒不回應接受到的訊息,
while(Timer1->Enabled == true)
{
if(getResponse) break;
}
if(!isTimeOut) Application->MessageBox(text,"Echo",MB_OK);
}
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
kenbcb
中階會員 ![]() ![]() ![]() 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
gemi0305
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
我修改了,也測試過,能夠做到你說的功能,
說明一下我所修改的地方, 第一:
不能用while迴圈來計時,因為while會占住cpu讓其他的程式無法執行,
所以我用了一個timer2,以0.1秒來當檢查頻率,來替代while,
保留你原先的想法。 第二:
每次要傳送資料的時候,記得把判斷的參數,如GetResponse等的值,初始化。 第三:
MessageBox我改成ShowMessage。 有需要的話,我再把測試的小範例上傳給你試
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |