Re: PostMessage and unprocessed messages
"Joseph M. Newcomer" <newcomer@flounder.com> ha scritto nel messaggio
news:g4n2t3h1eg0mqstigbqtspik4siilavbjf@4ax.com...
Now I'm curious why you are using ::PostMessage and where the HWND
'window' is defined. It
must not be a global or static variable, because usage of a static or
global varable is
not justified here.
They are member variables of a thread class.
I defined a custom thread class (call it Thread) for the background worker
thread, which stores the HANDLE of thread, the thread ID, and also HWND of
target window (the "receiver" window, to where messages are sent using
::PostMessage).
Neither global nor static variables.
You seem to indicate the thread function takes no parameters, but
that is incorrect, because it always takes an LPVOID.
Again, my custom Thread class has a static method which is the classical
ThreadProc that I pass to ::CreateThread.
Moreover, this class has a non-static method, which is called by static
thread proc, e.g.:
class Thread
{
public:
Thread()
: m_thread(NULL), m_ID(0) ...
{
}
~Thread()
{
if ( m_thread != NULL )
{
::CloseHandle( m_thread );
m_thread = NULL;
m_ID = 0;
}
}
bool Create()
{
...
m_thread = ::CreateThread(
NULL,
0,
StaticThreadProc,
(LPVOID *) this,
CREATE_SUSPENDED,
&m_ID
);
if ( m_thread == NULL )
return false; // failed
...
// All right
return true;
}
void StartAsync()
{
ASSERT( m_thread != NULL );
::ResumeThread( m_thread );
}
private:
HANDLE m_thread;
DWORD m_ID;
...
static DWORD WINAPI StaticThreadProc( LPVOID param )
{
Thread * me = (Thread *)param;
return me->ThreadProc();
}
DWORD ThreadProc()
{
...
... the thread long job here
...
}
};
Actually, I have a base thread class that has a *pure* virtual protected
ThreadProc() method, and all thread classes must derive from this class, and
implement their own ThreadProc (of course, this base class has a virtual
destructor, too).
class MyThread : public BaseThread
{
....
protected:
virtual DWORD ThreadProc()
{
....
}
};
I use ::PostMessage because I'm writing this project without MFC, instead
I'm using ATL/WTL.
However I'm asking here because this is the newsgroup where I can get your
help and wise advice... (and mapping MFC <-> Win32 is not that hard in this
context).
Giovanni