为什么CWinThread的成员函数中只有PostThreadMessage,没有SendThreadMessage???

mazhahn 2005-10-03 01:49:26
为什么CWinThread的成员函数中只有PostThreadMessage,没有SendThreadMessage???
...全文
592 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DentistryDoctor 2005-10-08
  • 打赏
  • 举报
回复
假设真有"SendThreadMessage",那么可能带来死锁。所以Windows根本就没设计这个。

"Send",需要返回才接着执行后续代码(所谓的"同步"方式),但消息在两个线程间传递,要执行消息处理代码,必然需要线程上下文切换。所以没有所谓的"SendThreadMessage"
oyljerry 2005-10-04
  • 打赏
  • 举报
回复
同步的可以通过异步来实现
lianglp 2005-10-03
  • 打赏
  • 举报
回复
PostThreadMessage()是异步的,一般来说,只要是异步的都可以做成同步的,需要自己
再包装一下就可以了,这个不是什么难事,只要你喜欢,比如:
HANDLE hEvent = ::CreateEvent(...);
WPARAM wParam = (WPARAM)hEvent;
::PostThreadMessage(dwThreadId,uMsgId,wParam,...);
::WaitForSingleObject(hEvent,INFINITE);
::CloseHandle(hEvent);
gunney 2005-10-03
  • 打赏
  • 举报
回复
因为 API 函数 只有PostThreadMessage();
没有SendThreadMessage();
为什么API函数没有 SendThreadMessage();
我估计是因为PostThreadMessage 只是加入到线程得消息队列里 而 SENDMESSAGE 需要直接调用 窗口函数 然后等待其返回

而线程消息队列不好处理吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧