CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.