2012-11-22 3 views
1

스레드에서 실행되는 장기 실행 작업이 있습니다.스레드에서 진행률 막대를 업데이트하는 가장 좋은 방법

이 코드는 모두 WinMain() 진입 점 (예 : WorkerClass)과는 별도의 클래스에서 발생합니다.

작업 진행 상황에 따라 진행률 표시 줄을 자주 업데이트하고 싶습니다.


A) 스레드 (문제를 내부에서 메인 윈도우 proc 디렉토리에 사용자 정의 PostMessage : 연구, 재판 및 오류의 몇 시간 후

, 나는 여러 가지 방법을 통해 왔어요 여러 가지로 눈살을 찌푸리게 출처 : 스레드는 일부 WorkerClass 기능 (문제에서 메인 윈도우 proc 디렉토리에)) 사용자 PostMessage

B를 메인 UI를 만지지해야 클래스 함수 대 무료 사이의 범위 문제로 실행 스레드 기능의 자유를 가지고 있기 때문에 클래스)

C) 작업자 스레드 업데이트 int 포인터, 다음 UI 스레드 타이머 업데이트 UI 주기적으로 (문제 :에 가치가 지출 시간,이 "잘못하고"있다)


많은 논의가 MFC 나 C#에 뛰어 들었습니다. 나는 관심이 없습니다.

저는 세 가지 방법으로로드 블록을 만났습니다. 하나를 알아내는 것에 좋은 일을하는 데 몇 시간이 걸릴 것입니다. 나는 그것을 잘못 배우려고 노력하고 싶지 않습니다.

내가 추구해야하는 것은 무엇입니까?

답변

2

FWIW : 현재 작업중인 코드 기반은 메인 스레드에 메시지를 게시합니다.

내가 선호하는 또 다른 방법은 옵저버 패턴입니다. 주 스레드는 작업자에게 "가입"하고 작업자가 자신을 업데이트 할 때마다 관찰자 (구독 한 모든 개체)에 알립니다. http://en.wikipedia.org/wiki/Observer_pattern

+0

OK 코드베이스가'A'를 사용하지만'B'를 선호하는 것처럼 들리십니까? – Ben

+1

기본 스레드가 작업자 스레드에 등록되는 위치를 선호합니다. 그런 다음 작업자 스레드가 진행 상황을 업데이트하면 "UpdateProgress()"함수가 모든 구독자를 반복하고 "ProgressUpdated()"함수 (콜백)를 호출합니다. –

+0

고마워, 내 다음 질문 (http://stackoverflow.com/questions/13506377/trouble-referencing-class-in-structure-using-this-keyword#13506421)과 결합 이제 물건 꽤 잘 작동했습니다. – Ben

관련 문제