Re: AfxBeginThread in mainframe.c???
thanks for your good answers!
Now every thread will be closed - OnTermThread will be called only
once for each thread.
void CMainFrame::OnClose()
{
if(ClosePending)
return;
if(m_threadIDs.GetSize() > 0)
{ /* defer shutdown */
for(UINT_PTR i = 0; i < m_threadIDs.GetSize(); i++)
if(::PostThreadMessage(m_threadIDs[i], m_threadMsgIDs[i], 0,
0))
{ /* failed */
}
ClosePending = TRUE;
return;
} /* defer shutdown */
//.... normal OnClose code here
CFrameWnd::OnClose();
}
For some thread-ids the PostThreadMessage will return an error ->
(GetLastError()) error-code is 0; Do you have some more information
about this error-code? If I do nothing in the error condition, all
PostThreadMessage will receive their message-functions
(OnTermThread).
Another sad thing:
Unfortunately, I`ve some memory leaks in the threads; but I don`t know
why. Do I have to close any additional things beside the serial-port?
class CSerialWrite :
public CWinThread
{
public:
CSerialWrite(void);
~CSerialWrite(void);
void SetTarget(CWnd * w) { target = w; }
void SetHandle(FT_HANDLE w) { ftHandle = w; }
void SetPort(UINT p) { port = p; }
private:
// Target of messages which are posted
CWnd * target;
UINT port;
FT_HANDLE ftHandle;
protected:
DECLARE_DYNCREATE(CSerialWrite)
virtual int ExitInstance();
virtual BOOL InitInstance();
afx_msg void OnTermThread(WPARAM, LPARAM);
DECLARE_MESSAGE_MAP()
};
void CSerialWrite::OnTermThread(WPARAM, LPARAM)
{
ASSERT(ftHandle != NULL);
ASSERT(target != NULL);
//close serial port
FT_W32_CloseHandle(ftHandle);
::PostQuitMessage(0);
}
best regards
Hans