|
정재훈 님이 쓰신 글 :
: 메인폼에서 A라는 작업을 하는 도중 B작업의 결과를 받아야 A라는 작업을 계속할 수 있는 경우인데요..
: B의 결과가 나올때 까지 A를 대기시켜야 합니다. 그러나 대기중에도 C라는 작업을 계속 해서 돌려야 합니다.
: 쉽게 생각해서 C를 쓰레드로 돌리고 메인을 Waitfor함수로 대기시키면 된다고 생각했었는데..
: 문제는 C라는 작업이 메인폼의 화면 업데이트를 써야하는 녀석이라...
: 메인폼은 계속 업데이트 되면서 B의 결과를 대기해야 하는 상황입니다..
: Waitfor함수로 대기시키니 C의 작업을 볼수없는...문제가...생깁니다.
:
: 설명이 되었을지 모르겠네요.
: 해결방안이 있을까요?
설명이 애매해서.
A와 C가 동시에 작동을 하는것인지.?
C는 항상 돌고 있고.
A는 B가 끝나야 돈다는것인지. 좀 헷갈리네요 ^^;
우선은 아래와 같이하시고
C라는 작업이 작업량이 많다면
우선은 C라는 작업 내에서 작업 중간에 메세지 뽐뿌질을 좀 해주시구요
(Application->ProcessMessage();)(API : PeekMessage(~))
스레드는 최후의 보루가 아닐지 생각해봅니다. ㅡ,.ㅡ;
B의 작업 결과가 어떤데이타인지 모르겠지만요.
사용자 정의 메세지를 사용하면 될거 같습니다.
1.
#define WM_B_RESULT (WM_USER+1)
이렇게 선언하시고
2.
B가 작업을 끝내면 A에 메시지를 보내는 형식으로요.
SendMessage( a의 윈도우 핸들, WM_B_RESULT , 0,0 );
3.
// A의 클래스 선언부에서는
class A
{
public:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_B_RESULT,TMessage,On_B_Result)
END_MESSAGE_MAP(TForm)
}
4.
// A의 구현부에서는
void __fastcall A::On_B_Result(TMessage &msg)
{
msg 처리..
}
|