2014-05-22 2 views
1

afxbeginthread를 사용하여 모덜리스 대화 상자를 실행 중입니다. 나는 Cwinthread에서 파생 된 새로운 클래스를 만들고 initinstance를 아래와 같이 재정의했다.afxbeginthread에 인수를 전달하는 방법

BOOL GuiThread::InitInstance(void) 
{ 
    CWinThread::InitInstance(); 
    dialog *dial = new dialog; 
    this->m_pMainWnd = dial; 
    dial->Create(dialog::IDD); 
    dial->ShowWindow(SW_SHOWNORMAL); 
    return TRUE; 
} 

내 주요 스레드에서 나는 다음과 같이 사용자 인터페이스 스레드를 생성합니다.

GuiThread *gui = (GuiThread*)AfxBeginThread(RUNTIME_CLASS(GuiThread),THREAD_PRIORITY_NORMAL,0,NULL,NULL); 
WaitForSingleObject(gui->m_hThread,INFINITE); 

제 질문은 어떻게 guithread에 인수를 전달할 수 있습니다. 나는 문자열을 전달하고 싶다. 내가 어떻게 할 수 있니?

+0

> m_pMainWnd'를 호출하고'dialog' 클래스에서 처리합니다. LPARAM 및 WPARAM을 통해 매개 변수를 전달하십시오. –

답변

0

당신은 스레드를 시작하지 않고 스레드 객체를 생성하는 CREATE_SUSPENDED 플래그를 사용할 수 스레드 개체의 다음 세트 구성원 변수와 스레드를 시작

GuiThread *gui = (GuiThread*)AfxBeginThread(RUNTIME_CLASS(GuiThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL); 
gui->m_sometext = sometext; 
gui->ResumeThread(); 
당신은 GUI 기반`에 사용자 정의 메시지를 보낼 수 있습니다
+0

좋은 답변입니다. 고맙습니다. 하지만 일단 스레드가 시작되면 m_sometext를 업데이트하려고합니다. 내 스레드를 일시 중단하고 변수를 업데이트 한 다음 다시 스레드를 재개 할 수 있습니까? 괜찮습니까? 참고 : 모덜리스 대화 상자를 실행하는 데이 스레드를 사용하고 있습니다. – Kumar

+0

아니요, 두 스레드 간의 데이터 액세스를 동기화하는 적절한 방법이 아닙니다. 두 스레드는 EnterCriticalSection 호출과 LeaveCriticalSection 호출 사이에 공유 데이터에 대한 액세스를 샌드위치해야합니다. 알렉스 파버 (Alex Farber)가 제안한 접근 방식을 취할 수도 있습니다. –

관련 문제