Re: passing "parent" ID to a new thread
On Wed, 04 Jul 2007 13:03:41 -0700, runcyclexcski@yahoo.com wrote:
Hi all,
From the main window I create a new thread that is supposed to open a
secondary window and to communicate with the main window by
PostMessage.
pNewThread = (CNewThread*)AfxBeginThread(RUNTIME_CLASS(CNewThread),0);
I need to pass the ID of the main window to the new thread when I
create the new thread, to be able to PostMessage to the main window
later. How do I pass the main widnow ID to the new thread? I
understand that there is no parent-child reglationship between threads.
If there were such a relationship, it wouldn't be between a window and a
thread; it would be between the threads. For a number of reasons, it is
usually better for one thread to create all the windows; this thread is
called the "main UI thread" among other things. That said, to pass
information into a thread when you create it, use the second AfxBeginThread
parameter for which you're currently passing 0. If it's pointer-sized or
smaller, you can just cast it to LPVOID when you call AfxBeginThread and
back to the original type in the thread entry function; it's common to do
this with the "this" pointer of a member function. If you need to pass a
lot of information and can't do it with "this", create a new class or
struct, dynamically create an instance with new, and pass a pointer to it
as the thread parameter. The created thread then assumes ownership of the
object and must delete it when done with it. This hand-off protocol avoids
lifetime issues, and you may need to use it when you PostMessage between
threads. Finally, for some info on safely using AfxBeginThread, see:
http://members.cox.net/doug_web/threads.htm
--
Doug Harrison
Visual C++ MVP