작업 환경 만들기 : 내가 VS 2015 년에 있어요C++ 새로운 주제의 콘솔에서 새 창 (Win32에서)
하고는 Win32 콘솔.
개요 :
내가 콘솔에 완료 할 수없는 기능을 수행하는 작업자 스레드의 역할을하도록 새 창을 만드는 오전.
새 창을 만들고 작업을 완료하는 코드가 잘 작동합니다. 그러나 그것은 콘솔을 고정시킵니다.
콘솔이 정지되어있는 동안 콘솔에서 스레드를 만들고 작업을 완료하는 코드가 있습니다. 이것은 또한 잘 작동합니다.
문제 :
내가 코드의 두 가지를 결합 할 수없는 나는, 나는 그것이 콘솔을 차단하지 않도록 스레드에서 새 창을 실행합니다.
코드 :
=============== INT 주요 =================== ===
시작 스레드
x = 0;
hPrintMutex = CreateMutex(NULL, false, NULL);
HANDLE hThread1 = (HANDLE)_beginthread(printNumber, 0, &x);
WaitForSingleObject(hThread1, INFINITE);
확인 새 창
WNDCLASSEX wndclass = { sizeof(WNDCLASSEX), CS_DBLCLKS, WindowProcedure,
0, 0, GetModuleHandle(0), LoadIcon(0,IDI_APPLICATION),
LoadCursor(0,IDC_ARROW), HBRUSH(COLOR_WINDOW + 1),
0, myclass, LoadIcon(0,IDI_APPLICATION) };
if (RegisterClassEx(&wndclass))
{
HWND window = CreateWindowEx(0, myclass, "title",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, GetModuleHandle(0), 0);
if (window)
{
ShowWindow(window, SW_SHOWDEFAULT);
MSG msg;
while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg);
}
}
= ======= 메인 외부 =========================
코드는 새로운 스레드에서 뭔가를
새 창을 만들 수
void printNumber(void* pInt)
{
int* xp = (int*)pInt;
while (*xp<100)
{
WaitForSingleObject(hPrintMutex, INFINITE);
++*xp;
cout << *xp << endl;
ReleaseMutex(hPrintMutex);
Sleep(10);
}
}
코드 (* 실제 내용은, 그들이 삭제하고 창 코드 *로 대체됩니다 단지 예입니다) 할 일
long __stdcall WindowProcedure(HWND window, unsigned int msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case something: {
}
default:
return DefWindowProc(window, msg, wp, lp);
}
}
의견이 있으십니까? 감사.
***** 솔루션 *****
내 게시 된 솔루션은 아래의 테스트 작업을 참조하십시오. 이 작업을 얻었다
콘솔과의 상호 작용을 차단하지 않으려면 다른 스레드를 사용하여 창을 만들어야합니다. –
스레드를 만들고 기다리는 것을 차단합니다. 당신의 스레드의 포인트는 무엇입니까? 창은 주 스레드에서 생성 된 것으로 보입니다. 용어 창과 스레드는 상호 교환 가능하지만 사용하지는 않습니다. –
스레드 핸들을 대기 한 직후에 스레드를 시작하면 복잡한 다중 스레드 구현이됩니다. 이는 다중 스레드 (동기화)의 단점이 없지만 이점 (동시성)도 없습니다. 아직 멀티 스레딩에 들어갈만큼 알지 못하는 것 같습니다. 당신은 그 주제에 관해 2 권의 훌륭한 책을 얻을 필요가 있습니다. 게다가,'_beginthread'의 리턴 값을 기다리는 것은 안전하지 않습니다. 그것은 당신 것이 아닙니다. 핸들의 소유권을 얻으려면 대신'_beingthreadex'를 호출하십시오. – IInspectable