多个子线程之间的消息相互传递总会出现有关问题,求高人指点
多个子线程之间的消息相互传递总会出现问题,求高人指点
#include "stdafx.h"
#define MAINTONORMAL WM_USER+1
#define MAINTOERROR WM_USER+2
#define TOMAIN WM_USER+3
#define NORMALTOMAIN WM_USER+4
#define ERRORTOMAIN WM_USER+5
CWinThread *MyThread[2];
HANDLE MyHandle[2];
DWORD MyDWORD[3];
bool bTreadRunFlag[2];
bool bThreadFlag[2];
bool bLinkSuccess;
DWORD ThreadExitCode[2];
char *str_Normal="123456";
char *str_Error="ABCDE";
UINT Thread_Normal(LPVOID pParam);
UINT Thread_Error(LPVOID pParam);
UINT ThreadMain(LPVOID pParam)
{
MSG Mmsg;
::PeekMessage(&Mmsg,NULL,0,0,PM_REMOVE);
bLinkSuccess=0;
MyDWORD[2]=GetThreadId(GetCurrentThread());
for (int i=0;i<=2;i++)
{
MyThread[i]=NULL;
bTreadRunFlag[i]=FALSE;
ThreadExitCode[i]=NULL;
bThreadFlag[i]=FALSE;
}
while(TRUE)
{
if (bTreadRunFlag[0]==false)
{
if (MyHandle[0]==NULL)
{
//正常处理线程
MyHandle[0]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Normal,NULL,0,&MyDWORD[0]);
bTreadRunFlag[0]=true;
}
}
if (bTreadRunFlag[1]==false)
{
if (MyHandle[1]==NULL)
{
MyHandle[1]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Error,NULL,0,&MyDWORD[1]);
bTreadRunFlag[1]=true;
}
}
::PostThreadMessage(MyDWORD[0],MAINTONORMAL,(WPARAM)str_Normal,0);
::PostThreadMessage(MyDWORD[1],MAINTOERROR,(WPARAM)str_Error,0);
// ::MsgWaitForMultipleObjects(1, GetCurrentProcess(), false, 100, QS_ALLEVENTS); // 如果没有消息就等待100毫秒
Sleep(5000);
}
return EXIT_SUCCESS;
}
UINT Thread_Normal(LPVOID pParam)
{
MSG M1msg;
// BOOL bRet;
::PeekMessage(&M1msg,NULL,0,0,PM_REMOVE);
while(::GetMessage(&M1msg, NULL, 0, 0 ))
{
if (::GetMessage(&M1msg, NULL, 0, 0 ))
{
switch(M1msg.message)
{
case MAINTONORMAL:
{
CString bstr1=(char *)M1msg.wParam;
// bstr.MakeReverse();
AfxMessageBox(bstr1);
}
break;//调控线程发来消息的处理
}
}
}
return EXIT_SUCCESS;
}
UINT Thread_Error(LPVOID pParam)
{
MSG M2msg;
// BOOL bRet;
::PeekMessage(&M2msg,NULL,0,0,PM_REMOVE);
while(::GetMessage(&M2msg, NULL, 0, 0 ))
{
if (::GetMessage(&M2msg, NULL, 0, 0 ))
#include "stdafx.h"
#define MAINTONORMAL WM_USER+1
#define MAINTOERROR WM_USER+2
#define TOMAIN WM_USER+3
#define NORMALTOMAIN WM_USER+4
#define ERRORTOMAIN WM_USER+5
CWinThread *MyThread[2];
HANDLE MyHandle[2];
DWORD MyDWORD[3];
bool bTreadRunFlag[2];
bool bThreadFlag[2];
bool bLinkSuccess;
DWORD ThreadExitCode[2];
char *str_Normal="123456";
char *str_Error="ABCDE";
UINT Thread_Normal(LPVOID pParam);
UINT Thread_Error(LPVOID pParam);
UINT ThreadMain(LPVOID pParam)
{
MSG Mmsg;
::PeekMessage(&Mmsg,NULL,0,0,PM_REMOVE);
bLinkSuccess=0;
MyDWORD[2]=GetThreadId(GetCurrentThread());
for (int i=0;i<=2;i++)
{
MyThread[i]=NULL;
bTreadRunFlag[i]=FALSE;
ThreadExitCode[i]=NULL;
bThreadFlag[i]=FALSE;
}
while(TRUE)
{
if (bTreadRunFlag[0]==false)
{
if (MyHandle[0]==NULL)
{
//正常处理线程
MyHandle[0]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Normal,NULL,0,&MyDWORD[0]);
bTreadRunFlag[0]=true;
}
}
if (bTreadRunFlag[1]==false)
{
if (MyHandle[1]==NULL)
{
MyHandle[1]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Error,NULL,0,&MyDWORD[1]);
bTreadRunFlag[1]=true;
}
}
::PostThreadMessage(MyDWORD[0],MAINTONORMAL,(WPARAM)str_Normal,0);
::PostThreadMessage(MyDWORD[1],MAINTOERROR,(WPARAM)str_Error,0);
// ::MsgWaitForMultipleObjects(1, GetCurrentProcess(), false, 100, QS_ALLEVENTS); // 如果没有消息就等待100毫秒
Sleep(5000);
}
return EXIT_SUCCESS;
}
UINT Thread_Normal(LPVOID pParam)
{
MSG M1msg;
// BOOL bRet;
::PeekMessage(&M1msg,NULL,0,0,PM_REMOVE);
while(::GetMessage(&M1msg, NULL, 0, 0 ))
{
if (::GetMessage(&M1msg, NULL, 0, 0 ))
{
switch(M1msg.message)
{
case MAINTONORMAL:
{
CString bstr1=(char *)M1msg.wParam;
// bstr.MakeReverse();
AfxMessageBox(bstr1);
}
break;//调控线程发来消息的处理
}
}
}
return EXIT_SUCCESS;
}
UINT Thread_Error(LPVOID pParam)
{
MSG M2msg;
// BOOL bRet;
::PeekMessage(&M2msg,NULL,0,0,PM_REMOVE);
while(::GetMessage(&M2msg, NULL, 0, 0 ))
{
if (::GetMessage(&M2msg, NULL, 0, 0 ))