제가 여전에 얼핏 본 기억으로 스레드 작업중에서
GUI작업은 될 수 있으면 직접적으로 하지 않는 것이 좋다라는 내용이 머릿속에 너무 강하게 각인되어있는데요...
해당 내용으로 검색을 아무리 해봐도 찾을 수가 없더군요;;;
선배개발자님들..저 말이 맞나요? 맞다면 왜 그런건가요?
Thread 스레드와 UI 를 분리하여 처리하는 방법 - 윈도우와 다이얼로그 멈춤을 방지하는 방법 | 디버깅과 테스트http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=962078&ref=962078&page=1
MFC UI Thread 스레드 통신 방법 정리 | 디버깅과 테스트http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=960863&ref=960863&page=1
UI 와 멀티 스레드 처리방법 - MFC | 디버깅과 테스트http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=953539&ref=953539&page=1
찾아보니. 데브피아'에 여러가지 강좌가 많이 있네요. 추가해봅니다.
이미 생성된 COM Pointer를 다른 Thread에서 사용하기 | ActiveX/COM http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8609&page=8
워커 쓰레드 관리 클래스 | VC++ 일반 http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8600&page=9
---------------------------------------------------------------------------- 젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다. 정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
뭐 나름이겠지만, 항상 절대적 금지는 아닙니다.
보통 그렇게 안하죠. 금기사항처럼 얘기되기도 하고요.
MFC 아니더라도 다 적용되는 사안입니다.
멀티스레드 GUI 프로그램일 경우 GUI 출력을 전담하는 스레드를 따로 둬서 이 스레드에서만 GUI 입출력을 하고 다른 스레드에서 GUI 출력이 필요하면 직접 GUI API 호출이 아닌 GUI출력 전담스레드에 출력을 요청하는 방식으로 구현하라는 겁니다.
GUI 출력스레드는 작업스레드에서 출력요청이 오면 현재 호출중인 GUI 함수들과 순서아 꼬이지 않도록 정리해서 호출하거나 다른 출력작업이 있어 출력해서는 안되는 상황일 경우 기다렸다가 출력해주거나 굳이 그때 말고는 출력이 필요없는 경우 버립니다.
GUI 관련 함수들이 thread-unsafe하게 된 경우가 많고, thread-safe하더라도 네트웍 연결로 나올때 순서 꼬이거나 해서 문제 생기는 경우가 많습니다. GUI 함수 중에는 중간에 간섭 없이 순서대로 호출해야 하거나 쌍이 맞아야 하는 경우도 있습니다.
X윈도우 프로그램도 X Connection 하나를 여러스레드에서 공유하면서 동시에 Xlib 호출하다보면 아주 랜덤하게 Bad Error내면서 프로그램이 뻗습니다. 아무생각없이 짜깁기로 프로그램 짰다면 메모리 누수처럼 원인 찾기도 매우 힘듭니다.
보통은 프로그램의 메인 스레드가 GUI(+간단한 작업)를 전담하고, 메인스레드에서 만들어진 작업 스레드는 주어진 일만 하는 식으로 구현합니다.
Written By the Black Knight of Destruction
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
참고해보세요.
Thread 스레드와 UI 를 분리하여 처리하는 방법 - 윈도우와 다이얼로그 멈춤을 방지하는 방법 | 디버깅과 테스트
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=962078&ref=962078&page=1
MFC UI Thread 스레드 통신 방법 정리 | 디버깅과 테스트
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=960863&ref=960863&page=1
UI 와 멀티 스레드 처리방법 - MFC | 디버깅과 테스트
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=953539&ref=953539&page=1
찾아보니. 데브피아'에 여러가지 강좌가 많이 있네요. 추가해봅니다.
이미 생성된 COM Pointer를 다른 Thread에서 사용하기 | ActiveX/COM
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8609&page=8
워커 쓰레드 관리 클래스 | VC++ 일반
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8600&page=9
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
필수 아님
뭐 나름이겠지만,
항상 절대적 금지는 아닙니다.
보통 그렇게 안하죠. 금기사항처럼 얘기되기도 하고요.
MFC 아니더라도 다 적용되는 사안입니다.
MFC 아니더라도 다 적용되는 사안입니다.
멀티스레드 GUI 프로그램일 경우 GUI 출력을 전담하는 스레드를 따로 둬서 이 스레드에서만 GUI 입출력을 하고 다른 스레드에서 GUI 출력이 필요하면 직접 GUI API 호출이 아닌 GUI출력 전담스레드에 출력을 요청하는 방식으로 구현하라는 겁니다.
GUI 출력스레드는 작업스레드에서 출력요청이 오면 현재 호출중인 GUI 함수들과 순서아 꼬이지 않도록 정리해서 호출하거나 다른 출력작업이 있어 출력해서는 안되는 상황일 경우 기다렸다가 출력해주거나 굳이 그때 말고는 출력이 필요없는 경우 버립니다.
GUI 관련 함수들이 thread-unsafe하게 된 경우가 많고, thread-safe하더라도 네트웍 연결로 나올때 순서 꼬이거나 해서 문제 생기는 경우가 많습니다. GUI 함수 중에는 중간에 간섭 없이 순서대로 호출해야 하거나 쌍이 맞아야 하는 경우도 있습니다.
X윈도우 프로그램도 X Connection 하나를 여러스레드에서 공유하면서 동시에 Xlib 호출하다보면 아주 랜덤하게 Bad Error내면서 프로그램이 뻗습니다. 아무생각없이 짜깁기로 프로그램 짰다면 메모리 누수처럼 원인 찾기도 매우 힘듭니다.
보통은 프로그램의 메인 스레드가 GUI(+간단한 작업)를 전담하고, 메인스레드에서 만들어진 작업 스레드는 주어진 일만 하는 식으로 구현합니다.
Written By the Black Knight of Destruction
댓글 달기