はシリアルポートにアクセスするために書いた粗コードです。私のデータを送信し、57600のボーレートを持つマイクロコントローラです。コードを一度実行して結果を得ましたが、ウィンドウを閉じた後、コンピュータがハングアップしました。私はCtrl + Alt + Delキーを押して、プロセスの下で私のプログラムがまだ実行されているのを見た。私もそれを閉じることができません。Windowsを使用しているときにプログラムがハングアップする
int n = 20;
char szBuff[20 + 1] = {0};
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts={0};
DWORD dwBytesRead = 20;
dcbSerialParams.DCBlength=sizeof(DCB);
hSerial = CreateFile("COM5",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
puts ("cannot open port!");
}
puts ("invalid handle value!");
}
if (!GetCommState(hSerial, &dcbSerialParams))
{
puts ("error getting state");
}
dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
{
puts ("error setting port state");
}
while (1)
{
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL)){
puts ("serial read error fail!");
}
else
{
printf ("%s\n" , szBuff);
}
}
あなたは 'while 1'を使用していますが、どのようにプログラムが終了すると思いますか? – stijn
私はポートから連続してデータを読みたいと思っています。間違っていると思います。私はこれをより効率的にやり遂げる方法を教えていただけますか? – user582485
それはそれほど間違っているわけではありませんが、プログラムを終了するときに何か言いたいことがあります。例えば 'puts(" serial read error fail! ")の代わりに' 'puts(" serial read error fail!これは既に(私が正しいとすれば)シリアルデバイスが故障したり切断されたときにループを終了するはずです。 – stijn