안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
Thread receive = new Thread() { // 메세지 받는 스레드
public void run() {
while(running) {
try {
userMsg = dis.readUTF();
} catch (Exception e) {
errorOccur();
}
}
}
};
receive.setDaemon(true);
receive.start();
이렇게 메세지를 받는 스레드를 만들고, 바로 밑에는
while(running) {
while(0 == userMsg.length()) { // 메세지 길이가 0 일 때는 대기 하고 있을 것.
if(!running) return;
// try{
// Thread.sleep(100);
// } catch (Exception e) {}
}
if(userMsg.substring(0, 2).equals("3")) { // 클라이언트로부터 방생성 요청.
System.out.println(userMsg.substring(2));
}
userMsg = ""; // 명령어를 받았으니 메세지는 다시 초기화.
}
이런식으로 루프를 돌면서 명령어 처리를 해주도록 하였습니다. 그런데, 메세지를 받아도 붉은 색으로 표시된 주석이 있는 while 부분을 탈출 하지를 못하고 있네요.. 주석을 풀어주면, 정상적으로 while 을 탈출해서 아랫쪽 명령어를 수행하고 다시 메세지 초기화를 해주는데..
왜 그런건가요? 굳이 슬립을 주고 싶지 않아서 이렇게 글을 남깁니다.
sleep 이 없으면, while 루프에 들어간 상태에서 vm이 context switching 을 할 지점을 못찾아서 그런겁니다.
일반적인 기법입니다. sleep(1)을 하든 최소값으로 놓고 코딩하세요.