C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23085] Re:시리얼과 WIN2000
심호용 [] 862 읽음    2002-12-07 09:30
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);
:           }
:  }

+ -

관련 글 리스트
22337 시리얼과 WIN2000 김용수 860 2002/10/30
31033     Re:시리얼과 WIN2000 국진(Ghost) 808 2002/10/30
23085     Re:시리얼과 WIN2000 심호용 862 2002/12/07
23102         Re:Re:시리얼과 WIN2000 김용수 822 2002/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.