MFC 线程消息传递问题二---两个线程之间进行消息的传递
2013-12-02 14:35
295 查看
在接受消息的线程中进行设置消息映射表来实现消息的处理
负责发送消息的线程在线程的run函数中进行消息的发送:
//线程之间进行消息传递设置
CTManageThread* pDealThread = newCTManageThread();
pDealThread->CreateThread();
BOOL ret = ::PostThreadMessage(pDealThread->m_nThreadID,WM_USER_THREADEND, 0,0);//把消息传送到指定ID的线程,不等待线程对消息的处理就会立即返回
这样在接受消息的线程中需要的是在线程执行函数体中进行获取消息并进行消息的转换和派遣:
BEGIN_MESSAGE_MAP(CTManageThread, CWinThread)
ON_THREAD_MESSAGE(WM_USER_THREADEND,OnManageMess)//添加的消息映射
//ON_WM_TIMER()
//ON_COMMAND()
END_MESSAGE_MAP()
void CTManageThread::OnManageMess(WPARAM wParam, LPARAMlParam)
{
::OutputDebugString(_T("ON_THREAD_MESSAGEis runing \r\n"));
}
UINT CTManageThread::TestManageThread(LPVOID pParam)
{//创建线程
CTManageThread* pDealThread =(CTManageThread*)pParam;
pDealThread->dealMessage();
return TRUE;
}
void CTManageThread::dealMessage()
{
MSG msg = {0};
do
{
::GetMessage(&msg, NULL,0,0);//从消息队列中进行检索有效的消息
CString str;
str.Format(_T("%d, 0x%x\r\n"),msg.message, msg.message);
OutputDebugString(str);
//this->PreTranslateMessage(&msg);//对于窗体和线程之间来说这个函数更适合,这是对于内部进行判断,然后如果内部没有的话就会给全局的消息翻译函数TranslateMessage
//::TranslateMessage(&msg);
this->DispatchThreadMessage(&msg);//对于线程之间进行消息传递的,这个函数更加适合
CTime t =CTime::GetCurrentTime();
CString strTime;
strTime.Format(_T("Deal :d:d:d\r\n"), t.GetHour(), t.GetMinute(), t.GetSecond());
OutputDebugString(strTime);
::Sleep(2000);
}while(1);
}
负责发送消息的线程在线程的run函数中进行消息的发送:
//线程之间进行消息传递设置
CTManageThread* pDealThread = newCTManageThread();
pDealThread->CreateThread();
BOOL ret = ::PostThreadMessage(pDealThread->m_nThreadID,WM_USER_THREADEND, 0,0);//把消息传送到指定ID的线程,不等待线程对消息的处理就会立即返回
这样在接受消息的线程中需要的是在线程执行函数体中进行获取消息并进行消息的转换和派遣:
BEGIN_MESSAGE_MAP(CTManageThread, CWinThread)
ON_THREAD_MESSAGE(WM_USER_THREADEND,OnManageMess)//添加的消息映射
//ON_WM_TIMER()
//ON_COMMAND()
END_MESSAGE_MAP()
void CTManageThread::OnManageMess(WPARAM wParam, LPARAMlParam)
{
::OutputDebugString(_T("ON_THREAD_MESSAGEis runing \r\n"));
}
UINT CTManageThread::TestManageThread(LPVOID pParam)
{//创建线程
CTManageThread* pDealThread =(CTManageThread*)pParam;
pDealThread->dealMessage();
return TRUE;
}
void CTManageThread::dealMessage()
{
MSG msg = {0};
do
{
::GetMessage(&msg, NULL,0,0);//从消息队列中进行检索有效的消息
CString str;
str.Format(_T("%d, 0x%x\r\n"),msg.message, msg.message);
OutputDebugString(str);
//this->PreTranslateMessage(&msg);//对于窗体和线程之间来说这个函数更适合,这是对于内部进行判断,然后如果内部没有的话就会给全局的消息翻译函数TranslateMessage
//::TranslateMessage(&msg);
this->DispatchThreadMessage(&msg);//对于线程之间进行消息传递的,这个函数更加适合
CTime t =CTime::GetCurrentTime();
CString strTime;
strTime.Format(_T("Deal :d:d:d\r\n"), t.GetHour(), t.GetMinute(), t.GetSecond());
OutputDebugString(strTime);
::Sleep(2000);
}while(1);
}
相关文章推荐
- MFC 线程与窗体进行消息传递的时候出现的无效线程问题
- MFC 线程的消息传递问题一---线程和窗体之间
- 使用Handler在线程之间传递消息所遇到的问题及解决方法
- MFC中创建工作线程,进行消息传递
- Android消息机制之实现两个不同线程之间相互传递数据相互调用
- MFC 两个对话框直接的消息传递
- MFC在不同的类窗体之间传递消息
- 两个线程之间的同步(生产者与消费者问题)性能优化
- Android中在两个Activity之间进行数据传递
- 两个独立java web工程之间传递中文参数的问题
- MFC中对话框之间消息传递
- 两个HTML页面之间传递信息中文乱码问题
- 用javascript来进行页面各表单之间的数据传递的问题
- WorkerThread与MainThread之间通过Handler进行最简单的消息传递
- C++中两个线程用同一个list进行数据传递
- java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
- MFC窗口之间的消息传递
- 线程间如何进行消息传递
- MFC对话框之间自定义消息传递
- android 主线程和子线程之间的消息传递