Re: multi-thread problem
cdg wrote:
I am not sure how to correctly write this Worker Thread example program.
And I realize that this specific problem is somewhat more of a C++ issue.
But I really needed to make sure that I was correctly writing this part of
the program.
I've also encountered another problem, but I thought it could be
connected with this first problem here. However, I would hoped to ask about
it later.
How do you write the statement that "post" the long integer in the
Controller thread to the receiving function.
UINT CThreadTestDlg::Thread1(LPVOID lParam)
{
CThreadTestDlg* pHwnd = (CThreadTestDlg *)lParam; //**is this
correct**
pHwnd->Thread1();
//**is this correct**
long Num = 123456789; //need to post this long int
::PostMessage((HWND)pHwnd, UWM_THREAD_FINISHED, (WPARAM)0, (LPARAM)Num);
return 0;
}
LRESULT CThreadTestDlg::OnThreadFinished(UINT wParam, LONG lParam)
{
return 0;
}
void CThreadTestDlg::OnStart() //button to start worker thread
{
AfxBeginThread(Thread1, this);
}
You passed 'this' in AfxBeginThread. The type of 'this' is
CThreadTestDlg*. But then in the thread function you named it pHwnd and
are attempting to use it as an HWND type. That's wrong: A pointer to a
dialog is not an HWND.
You have two choices. You can pass 'this' and use the MFC function
pDialog->PostMessage(UWM_THREAD_FINISHED, (WPARAM)0, (LPARAM)Num);
or you can pass the dialog's m_hWnd and use the Win32 function
::PostMessage(Hwnd, UWM_THREAD_FINISHED, (WPARAM)0, (LPARAM)Num);
But you can't do some of one and some of the other!!
--
Scott McPhillips [VC++ MVP]