현재 MFC 와 윈속을 사용하여 대화방을 구현중입니다.
이상한 문제가 일어나서 질문드립니다.
문제가 있는 부분 구성을 간단히 설명하면,
A라는 스레드 함수가 있습니다. 이 스레드에서는 서버로 메시지를 보내는 일을 합니다.
B라는 다이얼로그 함수가 있습니다. 보내기 버튼을 클릭했을 때 실행되는 컨트롤 함수입니다.
그리고 C(쓰기완료를 알림)라는 이벤트와 D(읽기완료를 알림)라는 이벤트가 있습니다.
A, B 함수 구성은 다음과 같습니다.
A()
{
while(1)
{
WaitForSingleEvent(C);
버퍼를 서버에 보내는 부분;
SetEvent(D);
}
}
B()
{
WaitForSingleEvent(D);
에디트컨트롤 텍스트를 버퍼에 넣는 부분;
SetEvent(C);
}
그리고 이벤트 C는 비신호 상태로, D는 신호 상태로 시작합니다. 둘다 매뉴얼모드 아니구요..
이렇게 되어있어서 제가 글을 쓰고 버튼을 누르면 B함수가 실행되서 D가 신호이므로 텍스트를 버퍼에 넣고
C를 신호로 만듭니다.
그러면 A함수에서 C가 신호가 되므로 버퍼를 서버에 보내게 되고, D를 신호로 만듭니다.
또 문장을 쓰고 버튼을 누르면 B가 실행되고 ~~~~~ 위와 똑같이 반복되야 정상인데,
문제는 두번째 눌렀을 때에는 A함수의 WaitForSingleEvent(C); 에서 멈춥니다.
B함수에서 SetEvent(C)를 했는데 말이죠...; 왜 신호상태로 줬는데 인식을 못하죠ㅡㅡ?
거기다 더 이상한 건, A함수의 WaitForSingleEvent(C); 문장 위에 MessageBox()하나 썼더니,
이제는 C를 계속 신호상태로 보고 무한루프가 돕니다.;;
WaitForSingleEvent() 함수로 신호상태인 이벤트를 받으면 받음과 동시에 비신호상태로 만든다고 알고 있는데,, 맞지 않나요? 대체 왜 이러는지 모르겠네요;;
도움 좀 부탁드리겠습니다.ㅠ 돌겠습니당.
신호인지 비신호인지 알아볼 수 있는 함수는 없나? 직관적으로 T of F로 리턴하는 그런..
of->or , 그리고 책에 그리 나와있던데.ㅠㅠ
뭐야 댓글 다 지워짐???
ㄴ 이해하기 쉽도록 클라이언트와 서버, 스레드, 이벤트, 함수를 잘 그려서 올리도록...