大家好,為什么程式全速運行時不進入訊息處理函式,設定斷點后又能進入訊息梳理函式呢?下面是關鍵代碼,還請各位不吝賜教!謝謝了!如果提供的代碼不全,我再上傳。
開發工具及開發語言:RAD C++ Builder 10.2



//當接受到資料送到視窗的訊息
#define ON_COM_RECEIVE (WM_USER + 618) // WPARAM 埠號
private: // User declarations
void __fastcall OnReadData(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(ON_COM_RECEIVE, TMessage, OnReadData)
END_MESSAGE_MAP(TForm)
//訊息處理函式:
void __fastcall TForm_TestSpecDevice::OnReadData(TMessage &Msg)
{
if (Msg.Msg == ON_COM_RECEIVE)
{
len = MyComm1.Read(Temp, 6152);
if((len == 8) && ((Temp[0] == 'S') && (Temp[3] == 'A') && (Temp[4] == 'C') && (Temp[5] == 'K')))
{
RecvFlg = 1;
memset(Temp, 0, sizeof(Temp));
}
else if ((len > 2048))
{
DataDecompressionAlgorithm(Temp,len,G_pArray);
if(SpecDateRecvOK ==1)
{
RecvFlg =0;
SpecDateRecvOK =0;
memset(Temp, 0, sizeof(Temp));
//len =0;
}
else
{
SpecDateRecvOK =0;
memset(G_pArray, 0, sizeof(G_pArray));
RecvFlg =0;
memset(Temp, 0, sizeof(Temp));
//len =0;
}
}
else if((len ==0)||((len>8)&&(len<2048)))
{
RecvFlg =0;
//len =0;
}
else;
}
}
uj5u.com熱心網友回復:
長時間回圈中Application->ProcessMessages()以處理回應佇列中的訊息。uj5u.com熱心網友回復:
謝謝您的回答,還是不懂,請您詳細給我說下。uj5u.com熱心網友回復:
查一下Help,TApplication類的ProcessMessages方法。uj5u.com熱心網友回復:
檢查一下有沒有大量占用主執行緒資源的代碼。uj5u.com熱心網友回復:
估計是這個地方:len = MyComm1.Read(Temp, 6152);
阻塞了
uj5u.com熱心網友回復:
這到是的,如果串口是同步模式,又沒有設定超時的話,這個地方就阻塞了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37676.html
標籤:茶館
