2011-12-23 3 views
1

... 메시지 상자 스레드는 어떻게 만듭니 까? 내가 좋아하는 일을 시도

const char *MessageBoxText = ""; 

DWORD WINAPI CreateMessageBox(LPVOID lpParam){ 

    MessageBox(NULL, MessageBoxText, "", MB_OK|MB_APPLMODAL); 
    return TRUE; 

} 

MessageBoxText = "Blah, Blah, Blah..."; 
CreateThread(NULL, 0, &CreateMessageBox, NULL, 0, NULL); 

그러나, 이것이 내가 수행하려고 작업에 대한 제대로 작동하지 않는 것 같습니다. 메시지 상자의 스레드를 만들 때 가장 좋은 방법은 무엇입니까?

+1

얼룩? – DrYap

+0

글쎄, 당신이 게시하려고했던 코드가 당신이하려는 일을하지 않았기 때문에, 어떻게 그 일에서 당신의 작업을 추론해야합니까? 모달이 아닌 대화 상자를 본 것 같아요. –

+0

작업중인 파이썬 게임에 대한 디버그 프로그램을 만들고 있는데, 버튼을 누를 때 확인 메시지 상자가 나타납니다. 그러나 메시지 상자가 9 개 이상인 경우 충돌이 발생하고 일부 사람들은 종료되지 않을 수 있습니다. 메시지 상자 그래서 글리치 쳐서, 실제로 충돌하는 것입니다. – GreenMyth

답변

1

전역 변수 대신 스레드 매개 변수로 메시지 텍스트를 전달하여 코드를 스레드로부터 안전하게 만드는 것을 고려하십시오.

DWORD WINAPI CreateMessageBox(LPVOID lpParam) { 
    MessageBoxA(NULL, (char*)lpParam, "", MB_OK); 
    return 0; 
} 
CreateThread(NULL, 0, &CreateMessageBox, "Blah, Blah, Blah...", 0, NULL); 

또한, 당신은 기본 플래그가 (이 0으로 동일)의로 MB_APPLMODAL을 지정할 필요가 없습니다. MessageBoxA이 UTF-16에 당신에게 문자열을 변환하고 전화 때문에

당신은 현대의 Windows OS를 대상으로하는 경우, 그것은, UNICODE 정의해야하는 것이 좋습니다 MessageBoxW

수행하려고하는 당신은 무엇을 의미합니까 작업이 무엇
+0

고맙습니다. 제 문제가 수정되었습니다. 추가 정보를 가져 주셔서 감사합니다. – GreenMyth

0

메시지 상자의 스레드를 만들 때 가장 좋은 방법은 무엇입니까?

일반적으로 그렇지 않습니다.

Windows에서 응용 프로그램의 모든 창 (작은 'w', 여기서는 개별 GUI 요소를 의미 함)은 단일 스레드에서 "실행"됩니다. 이것은 일반적으로 "주"스레드입니다. 특히, message pump이 실행중인 스레드입니다. 메시지 펌프에 대한 자세한 내용은 링크 된 게시물을 참조하십시오.

진정한 목표는 대화 상자 나 실행중인 다른 창과 동시에 실행할 수있는 다른 종류의 창이므로 다른 창은 사용자 입력에 여전히 응답하는 동안 계속 남아있게 할 수 있습니다. a 모덜리스 창 또는 대화 상자. 이 창은 다른 창에서 업데이트를 처리하거나 사용자 입력을 수락하지 못하도록 차단합니다. See here MFC를 사용하여 구현하는 방법에 대한 설명은 있지만 모덜리스 대화 상자를 구현하려면 MFC를 사용할 필요가 없습니다.

관련 문제