各位好:
小弟在除錯一個程式的時候發現一個問題,就是代碼中的Sleep函式好像沒有效果,請各位幫忙分析一下。
代碼中要求延時10秒后,接收資料不正確的話提示一個錯誤視窗,實際生成可執行程式之后,出現了按下執行按鈕后立刻彈出錯誤視窗,好像時延時指令沒有效果。而且這個現象在我的電腦上沒有,但是在別人的電腦上會出現,真是很奇怪。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
char* lpath;
lpath = (char*)LocalAlloc(LMEM_ZEROINIT,200);
strcpy(lpath,filepath);
int state;
strcpy(lpath,filepath);
strcat(lpath,"\\圖片\\222.txt");
state = BPLA_SendFile(lpath);
Sleep(10000);
if(state!=BPLA_OK)
{
char Msg[20] = {0};
sprintf(Msg, "last errror = %d", state);
ShowMessage(GetLastError());
ShowMessage(Msg);
MessageBox(NULL, "檔案列印失敗!", "提示:", MB_ICONINFORMATION);
return;
}
for(int num = 1;num<StrToInt(Edit14->Text);num++)
{
state = BPLA_SendFile(lpath);
if(state!=BPLA_OK)
{
MessageBox(NULL, "檔案列印失敗!", "提示:", MB_ICONINFORMATION);
return;
}
}
bpress=false;
LocalFree(lpath);
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
Sleep占用主執行緒,會造成界面僵住。這樣的延時不科學。用以下代碼來代替:DWORD dwTick = ::GetTickCount();
while (::GetTickCount() - dwTick < 10000)
{
Application->ProcessMessages();
}
uj5u.com熱心網友回復:
原來也可以這樣延時,又學到新招... 我都用這樣,但的確會僵住視窗。Application->ProcessMessages();
Sleep(5000);
uj5u.com熱心網友回復:
Sleep會暫停當前執行緒, 所以不建議在UI執行緒中使用.uj5u.com熱心網友回復:
學習了
uj5u.com熱心網友回復:
學習了
uj5u.com熱心網友回復:
學習了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130055.html
標籤:基礎類
