|
Timeout 시간을 조정해 보세요.
저도 그문제 때문에 한참 고생을 했거든요.
아마 Timeout 문제가 맞을거 같네요.
그럼 .
김용수 님이 쓰신 글 :
: 안녕하세요. 고수님들의 충고 부탁드립니다.
: 아래 소스와 같이 시리얼 통신 프로그램을 작성하여
: DSP와 통신하는 프로그램입니다.그런데
: win98에서는 아주 잘되었는데요, 문제는 win2000에서
: 해보니 프로그램에서 전송은 잘되는데 프로그램으로 받지를 못하고 있습니다.
: ReadFile 부분이 문제인가요?
:
:
: //-------------------------------- main.cpp
:
: hComm = CreateFile(COMPort.c_str(),
: GENERIC_READ | GENERIC_WRITE,
: 0,
: NULL,
: OPEN_EXISTING,
: FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
: NULL );
:
: // IF THE PORT CANNOT BE OPENED, BAIL OUT.
:
: if(hComm == INVALID_HANDLE_VALUE)
: {
: ShowMessage("COM Port Open Error, Exit!");
: Application->Terminate();
: }
: else
: {
: ComOpenSuccess=10;
: COMmLED->Color=lcGreen;
: Com_Ok_Message=COMPort+" Port successfully Opened...";
: MainForm->StatusBarMain->Panels->Items[0]->Text=Com_Ok_Message;
: }
:
: // SET THE COMM TIMEOUTS IN OUR EXAMPLE.
:
: GetCommTimeouts(hComm,&ctmoOld);
: /*ctmoNew.ReadTotalTimeoutConstant = 100;
: ctmoNew.ReadTotalTimeoutMultiplier = 0;
: ctmoNew.WriteTotalTimeoutMultiplier = 0;
: ctmoNew.WriteTotalTimeoutConstant = 0;*/
: ctmoNew.ReadIntervalTimeout = MAXDWORD;
: ctmoNew.ReadTotalTimeoutConstant = MAXDWORD;
: ctmoNew.ReadTotalTimeoutMultiplier = MAXDWORD;
: ctmoNew.WriteTotalTimeoutMultiplier = MAXDWORD;
: ctmoNew.WriteTotalTimeoutConstant = MAXDWORD;
: SetCommTimeouts(hComm, &ctmoNew);
:
: // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
: // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
: // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
: // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
: // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
:
: dcbCommPort.DCBlength = sizeof(DCB);
: GetCommState(hComm, &dcbCommPort);
: AnsiString BuildComDCBSTRING=IntToStr(COMBps)+","+COMParity+","
: +IntToStr(COMBit)+","+IntToStr(COMSTOPBit);
: ; // "9600,N,8,1"
: BuildCommDCB(BuildComDCBSTRING.c_str(), &dcbCommPort);
: SetCommState(hComm, &dcbCommPort);
:
: // ACTIVATE THE THREAD. THE FALSE ARGUMENT SIMPLY MEANS IT HITS THE
: // GROUND RUNNING RATHER THAN SUSPENDED.
: ReadThread = new TRead(false);
:
:
: //(2)-------------------------------- readthread.cpp의 thread에서
:
: while(!Terminated)
: {
:
: // 데이터를 쓰는 경우의 조건식은 생략합니다
: TransmitCommChar(hComm,'K');
:
: // 데이터를 읽는 경우의 조건식은 생략합니다
: ReadFile(hComm, InBuff, 1, &dwBytesRead, NULL);
: if(dwBytesRead)
: {
: InBuff[dwBytesRead] = 0; // NULL TERMINATE THE STRING
: Synchronize(DisplayIt);
: }
: }
|