1.
HANDLE hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
::PostThreadMessage(hThread, WMU_WORK, (WPARAM)new Param(), (LPARAM)hEvent);
::WaitForSingleObject(hEvent, 1000);

2.
volatile int state = 0;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, ThreadFunc, (void*)state, 0, 0, 0, 0);

::PostThreadMessage(hThread, WMU_WORK, (WPARAM)new Param(), (LPARAM)hEvent);
while (state != 0) { ::Sleep(1); }