往往我们在写代码时涉及到多线程就不得不使用消息函数 那今天我们就来谈谈PostMessage和SendMessage函数的区别
PostMessage 消息投递到队列窗口,只管投递,不需要函数返回,就是不管消息有没有投递成功,立即执行往后的代码,相当于不堵塞 看如下代码 当调用PostMessage函数时,即使函数没有返回,立即往下执行判断pRcvData是否为NULL
if (m_WndRealDlg != NULL)
{
::PostMessage(m_WndRealDlg, WM_DLG_RECEIVE_REAL, (WPARAM)(pRcvData->m_Data), (LPARAM)0);
}
if (pRcvData != NULL)
{
delete pRcvData;
pRcvData = NULL;
}
SendMessage 消息投递到队列窗口,要等到当前函数返回之后,才往下执行,相当于同步,好比快递员送信一样,要送到当事人之后,当事人签完字之后才返回。
而SendMessage函数则有点区别 要等到SendMessage函数返回之后,才往下执行判断pRcvData是否为NULL
if (m_WndRealDlg != NULL)
{
::SendMessage(m_WndRealDlg, WM_DLG_RECEIVE_REAL, (WPARAM)(pRcvData->m_Data), (LPARAM)0);
}
if (pRcvData != NULL)
{
delete pRcvData;
pRcvData = NULL;
}
所以在效率上SendMessage不如PostMessage,但是当消息重要时建议使用SendMessage函数,确保消息不会丢失,而使用PostMessage会存在丢失信息的情况发生