|
감사합니다. 한번 해보겠습니다.
심호용 님이 쓰신 글 :
: 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);
: : }
: : }
|