Re: thread - structure
On Tue, 20 Jun 2006 12:22:36 -0500, "cdg" <anyone@anywhere.com> wrote:
should declare it as a nested class, e.g.
// In .h file
class CThreadTestDlg
{
...
// No need to define it here, unless multiple .cpp files will use it.
struct ThreadStruct;
static UINT Thread1(LPVOID lParam);
};
Does this nested class use the same name as the main dialog, or is this
just a member data of the main dialog.
The "struct ThreadStruct;" is a "forward declaration" of a nested struct.
In my previous message, I defined it in the .cpp file:
// In .cpp file
struct CThreadTestDlg::ThreadStruct
{
HWND hWnd;
long NumA;
unsigned short NumB;
unsigned short NumC;
};
The type ThreadStruct is nested within CThreadTestDlg, and it must be
prefaced with CThreadTestDlg:: to distinguish it from a global struct of
the same name. The whole point of doing things this way is to reduce
compilation dependencies; it allows you to modify the definition of
ThreadStruct without forcing the recompilation of files that #include the
header that defines CThreadTestDlg. See above comment for restrictions,
though.
And why is the Controller function
prototype placed in the above declaration.
Because it needs to be a member function in order to use the type
CThreadTestDlg::ThreadStruct, which ought to be declared private. Well, it
could be a friend, but there's no reason to prefer that to making it a
static member. Making it static is necessary in order for the function to
be used as the controlling function for a thread.
--
Doug Harrison
Visual C++ MVP