|
40/142 번 줄을 좀 보여주세요 ^^;
핸들값은 32비트 정수형이기 때문에
제가 말씀드린 그부분에서 에러나는거 같지는 않거든요 ^^;
(혹시 모르니 선언을 HANDLE X,Y; 이런식으로 해보시구용 @_@);
그리고 전체 소스를 보지 않아서 모르겠지만
아래의 것들로만 유추한다면
gethcomm() 함수는 맨 마지막에 ( sethcomm(X) ) 한것만을 리턴할거 같은데요?
제말은 고로..
동시에 여러 포트를 감시하려면 10개를 감시하려면
10개의 쓰레드를 돌려야 하지 않는가 입니다.
timeout을 주지 않은 상태에서 ReadFile(~~)하게 되면
컴퓨터는 그상태에서 블럭킹 모드로 돌입합니다(올때까지 기다리죠, 다른것을 할 수 없습니다.)
(timeout을 아주 짧게 잡고 루프로 돌린다는것도 좀 문제가 있죠)
각각 포트에 대해 감시하는 쓰레드를 붙혀주고 만약 입력이 들어올 경우에는
메인 쓰레드(메인 프로그램)에 통지를 해서 처리하는 방식이어야 하지 않나 생각됩니다.
사실 저도 말하면서도 이게 맞나 싶지만, 보거스님이 올려주신 소스만 가지고 판단할 때
맨 마지막에 sethcomm() 했던 포트만 감시할 수 있을거 같습니다.
저도 연구좀 해봐야겠네요 ^^;
보거스 님이 쓰신 글 :
: 답변 감사드립니다.
: 말씀하신대로 할려고 하니까
:
: BOOL ccomm32::opencomm(int nport, DWORD dwbrate)
: {
: char port[5];
: int n_Port[20];
: wsprintf(port, "COM%d", nport);
: n_Port[nport-1] = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL,
: OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
: 중략...
: }
:
: DWORD ccomm32::readcomm(BYTE *by, int nlen)
: {
: int h_Port = gethcomm();
: 중략...
: }
:
: 위에 CreateFile 부분과 h_Port = gethcomm(); 부분에 아래와 같은 에러가 나오거든요.
:
: [C++ Error] Comm32.cpp(40): E2034 Cannot convert 'void *' to 'int'
: [C++ Error] Comm32.cpp(142): E2034 Cannot convert 'void *' to 'int'
:
: Type이 맞지 않는것 같은데 형변환을 어떻게 하면 되나요?
: int h_Port = (int)gethcomm(); 이런식으로 하면 에러는 나지 않는데 n_Port에 888 이란 값으로 들어가거든요.
:
: 저도 연구를 해보겠습니다.
:
: 그리고 getcomm(),setcomm()는 sethcomm(HANDLE h)로 셋팅한것을 gethcomm()으로 핸들을 반환하는 함수로
: 만든거에요. WARSHIP 님이 생각하신것이 맞습니다.
:
: HANDLE m_hcomm;
:
: void sethcomm(HANDLE hcomm)
: { m_hcomm = hcomm; }
: HANDLE gethcomm()
: { return m_hcomm; }
|