请问:PostMessage每线程最大使用次数是1万次。不理解。

eduyu 2008-12-21 08:14:01
以前我以为是queue的条目是一万次,既然消息处理后就会从queue中删除,所以1万条cache很够用了。最近做程序才发现不是如此是只能call他1万次,不解。难道postmessage的消息不会从message queue中移除?
...全文
342 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjlsmail 2009-04-01
  • 打赏
  • 举报
回复
PeekMessage() 参数决定分发后是否从队列中删除。
蒋晟 2009-01-27
  • 打赏
  • 举报
回复
http://blogs.msdn.com/oldnewthing/archive/2009/01/26/9375457.aspx
noenoughmemory 2008-12-27
  • 打赏
  • 举报
回复
不懂,up
WizardK 2008-12-27
  • 打赏
  • 举报
回复
没有说清消息发送频率和消息处理频率
野男孩 2008-12-27
  • 打赏
  • 举报
回复
消息没有remove吧, 我用PostThreadMessage就没这问题.
qiyuqing 2008-12-27
  • 打赏
  • 举报
回复
用个doevents 好了啊。
wulinnm 2008-12-25
  • 打赏
  • 举报
回复
也许是window内部限制把,消息在加入消息队列中最多10000左右,你不信用其他可以加入消息队列函数用下,估计也就在10000左右就没了,我试过,要是无限的话那不就是溢出BUG
wjlsmail 2008-12-23
  • 打赏
  • 举报
回复
Mark
woshizhanhun 2008-12-22
  • 打赏
  • 举报
回复
有趣的现象~~
jixingzhong 2008-12-22
  • 打赏
  • 举报
回复
倒是可以看看消息响应速度和消息发送比率 ... 是不是增长过快溢出 ...
蒋晟 2008-12-22
  • 打赏
  • 举报
回复
数据太多的话,用数据库来管理吧
authenticationf 2008-12-21
  • 打赏
  • 举报
回复
mark
qqlpp 2008-12-21
  • 打赏
  • 举报
回复
mark
sys0007 2008-12-21
  • 打赏
  • 举报
回复
应该是使用方法不当
微软不会这么弱智吧
wltg2001 2008-12-21
  • 打赏
  • 举报
回复
难道postmessage的消息不会从message queue中移除?
====================
这个要看最后的参数.
ilovedrv 2008-12-21
  • 打赏
  • 举报
回复
消息是如何取走的,按理说消息队列不应该这么大的

PeekMessage(&msg, 0, 0, 0, PM_REMOVE)
cnzdgs 2008-12-21
  • 打赏
  • 举报
回复
消息队列最多可以容纳10000条消息,只要从中移除消息,就可以再Post。试试这段代码:
void Test()
{
MSG msg;
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE));
DWORD threadId = GetCurrentThreadId();
int n = 0;
while (PostThreadMessage(threadId, WM_USER, 0, 0)) n++;
printf("PostThreadMessage return FALSE, n=%d.\n", n);
PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
if (PostThreadMessage(threadId, WM_USER, 0, 0))
printf("PostThreadMessage return TRUE after PeekMessage.\n");
else
printf("PostThreadMessage return FALSE after PeekMessage.\n");
printf("Clear message queue. Let n=0\n");
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE));
n = 0;
while (PostThreadMessage(threadId, WM_USER, 0, 0)) n++;
printf("PostThreadMessage return FALSE, n=%d.\n", n);
}
jameshooo 2008-12-21
  • 打赏
  • 举报
回复
应该是队列有1万条,处理了消息就会移除,你的消息循环不会是PeekMessage(..., PM_NOREMOVE)吧
bitwwzhang130 2008-12-21
  • 打赏
  • 举报
回复
postmessage会被自动移除消息队列的。
lz是不PeekMessage的参数错了,应该是PeekMessage(&msg, 0, 0, 0, PM_REMOVE)
jixingzhong 2008-12-21
  • 打赏
  • 举报
回复
PostMessage把消息扔到队列里去...
加载更多回复(3)

15,473

社区成员

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

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