Curses 모드에서 TCP/IP 채팅 프로그램 만드는데 질문 드립니다.
멀티쓰레드를 이용한 책의 예제로 나와있는 채팅 프로그램으로 curses 모드에서 동작하는 것을 만들고있습니다
그런데 터미널에서 채팅을 할 때는 문제없던 예제소스가 curses 모드에서는 커서로 인해 RACE 상태가 걸리면서 화면이 깨지더군요. 현상은 제가 입력하고 엔터를 치면 (mvwgetnstr) 저의 커시스 화면이 깨집니다. 그래도 상대방에게는 전달되더군요. 대신에 상대방도 채팅 내용을 입력하고 엔터를 치면 상대방도 깨집니다.
curses 윈도우로는 채팅 디스플레이 윈도우와 채팅 입력 윈도우 2개가 있고 쓰레드는 보내는 쓰레드와 받는 쓰레드가 있습니다.
그래서 보내는 쓰레드에서 무한루프로 입력 윈도우에서 커서에 입력되는 문자열을 보내고, 받는 쓰레드에서 받은 문자열을 디스플레이 윈도우에 출력해주는 식입니다.
첫째로 커서를 윈도우 마다 둬서 독립적으로 각각의 쓰레드에서 커서를 하나씩 쓰게 하는 방법 예로 보내는 쓰레드는 입력 윈도우의 커서만 이용하여 입력을 받아 전송하고, 받는 쓰레드에서는 디스플레이 윈도우의 커서만을 이용하여 전송 받은 내용을 출력하는 식으로요.
두번쨰 보내는 쓰레드에서 채팅 내용을 입력 받고 있다가 받는 쓰레드에서 뭔가 내용을 받았다면 보내는 쓰레드에 신호를 줘서 보내는 쓰레드가 잠시 입력을 멈추고 받는 쓰레드로 넘어가서 받은 내용을 출력하고 다시 보내는 쓰레드로 다시 이동해서 입력을 계속 이어가는 방법
제가 지금 생각해낸거라곤 저것뿐인데.. 가능 한가요?
댓글 달기