[ CnUnix ] in KIDS 글 쓴 이(By): jeomma (정 진호) 날 짜 (Date): 1994년08월02일(화) 12시57분39초 KDT 제 목(Title): [A] 윈도우즈 프로그래밍 잘 하시는 분.... 안녕하세요.. 원도우즈에서 프로그램 짜기가 보통 어려운일이 아닌것 같죠.. 잘 알지는 못하지만 약간 설명드릴께요. 근본적으로 Windows3.1는 non-preemptive방식이라서 현재 어떤 프로그램이 작업 중이면 원도우에서 발생하는 모든 종류의 이벤트에 대해 처리가 불가능합니다. 다른 프로그램에서 그렇게 하고 있다고 예를 드신것이 제가 생각하기에는 화일 복사 중에 취소 버튼 누룰 수 있는 뭐 그런걸 말씀하시는 것 같으데, 이런 작업을 하기 위해서는 나름대로 독특한 방법으로 프로그램 하셔야 합니다. 즉 현재 메세지를 처리 중인데 다른 메세지를 처리 할 수는 없다는 거죠.. 기본적인 골격을 보면 적당한 시간 (약 1초 - 2초) 정도씩 계속 제어를 받아 가면서 필요한 코딩을 하여야 합니다. 즉 계속 for loop을 도는 것이 아니라 한번에 조금씩 하는 것입니다. 그러면 어떻게 하면 되나.. 첫째로 윈도우에서 제공하는 timer를 사용하는 겁니다. 펑션이름이 뭐더라 정해놓은 시간이 지나면 WM_TIMER라는 메세지가 발생합니다. 그러면 이 메세지를 처리하는 부분이 실행될 수 있겠죠. 두번째로는 현재 메세지 큐에 메세지가 있는지 살펴봐서 만약 없으면 계속 작업을 하고 아니면 해당 메세지를 처리하는 수 도 있습니다. 하지만 이 방법은 약간 특수한 경우가 아니면 권하고 싶지 않네요.. 결론적으로 말하면 첫번째 방식대로 한 번에 조금씩 필요한 메세지를 계속 발생시키면서 작업하시는게 정석이라고 할 수 있습니다. 물론 NT나 Chicago같이 multi-thread인 경우에는 약간 예외이지만 특정 메세지에 대한 처리중에 다른 메세지를 처리할려면 프로그램이 상당히 복잡할 것 같네요.. 그럼 도움이 되었으면 그리고 저는 Visual C++에서 작업하고 있는데 상당히 좋은 환경인거 같아요.. C++를 모르는 경우에 새로운 언어를 배워야 하는 부담이 있지만.. jhjung |