|
이렇게 여러번 답변 주셔서 너무 감사드립니다.
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();
중략...
}
에러 해당 부분은
(40): 은
n_Port[nport-1] = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
(142): 은
int h_Port = gethcomm(); 부분이에요.
스레드는 사용하지 않구요.(사실 사용하기 좀 어렵던데요.)
타이머를 이용해서 1초 간격으로 readcomm() 호출해서 데이타가 들어왔을때만 처리하거든요.
처음에 프로그램 시작시 장비와 연결되어 있는 포트(멀티포트)를 순차적으로 OPEN하고 그 다음에는
어차피 멀티포트이기 때문에 각각 독립된 포트로서 데이타를 송,수신 하지 않습니까? 맞나요?
블럭킹 모드로 들어가지는 않는것 같구요.
gethcomm() 함수는 맨 마지막에 ( sethcomm(X) ) 한것만을 리턴할거 같은데요? 라고 말씀하셨는데
생각해보니 그럴것 같네요.
그러면 핸들을 선언할때 배열로 선언해서 어떻게 처리하면 될것 같은데
그걸 int type으로 보면 888 과 같은 숫자가 나와서요.
COM1을 Open 해서 그 포트로 데이타가 들어오면 1 이라는 숫자가 나와야 되는거 아닌가요?
WARSHIP님 이렇게 도와주셔서 감사드리구요.
지금까지 말씀하신 방향으로 접근해보도록 하겠습니다.
WARSHIP 님이 쓰신 글 :
: 40/142 번 줄을 좀 보여주세요 ^^;
: 핸들값은 32비트 정수형이기 때문에
: 제가 말씀드린 그부분에서 에러나는거 같지는 않거든요 ^^;
: (혹시 모르니 선언을 HANDLE X,Y; 이런식으로 해보시구용 @_@);
: 그리고 전체 소스를 보지 않아서 모르겠지만
: 아래의 것들로만 유추한다면
: gethcomm() 함수는 맨 마지막에 ( sethcomm(X) ) 한것만을 리턴할거 같은데요?
: 제말은 고로..
: 동시에 여러 포트를 감시하려면 10개를 감시하려면
: 10개의 쓰레드를 돌려야 하지 않는가 입니다.
: timeout을 주지 않은 상태에서 ReadFile(~~)하게 되면
: 컴퓨터는 그상태에서 블럭킹 모드로 돌입합니다(올때까지 기다리죠, 다른것을 할 수 없습니다.)
: (timeout을 아주 짧게 잡고 루프로 돌린다는것도 좀 문제가 있죠)
: 각각 포트에 대해 감시하는 쓰레드를 붙혀주고 만약 입력이 들어올 경우에는
: 메인 쓰레드(메인 프로그램)에 통지를 해서 처리하는 방식이어야 하지 않나 생각됩니다.
:
: 사실 저도 말하면서도 이게 맞나 싶지만, 보거스님이 올려주신 소스만 가지고 판단할 때
: 맨 마지막에 sethcomm() 했던 포트만 감시할 수 있을거 같습니다.
: 저도 연구좀 해봐야겠네요 ^^;
:
|