后面的消息会被丢掉,然后系统会发出"嘀"的一声
如果你使用一个局部变量作为消息参数
例如
TCHARszText[20]=_T(”标题“);
::SendMessage(hWnd,WM_SETTEXT,(WPARAM)szText,lParam);
可以成功,但如果是PostMessage可能会访存错误大侠,为什么啊?????
SendMessage就像系统调用回调函数
需要该函数执行完后才返回
PostMessage则就不是,先放到队列中等候处理
所以有可能参数szText所指的地址已经非法。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
长时间这样下去,消息队列塞满后
后面的消息会被丢掉,然后系统会发出"嘀"的一声?
为啥子不是前面的被丢掉?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果你使用一个局部变量作为消息参数
例如
TCHARszText[20]=_T(”标题“);
::SendMessage(hWnd,WM_SETTEXT,(WPARAM)szText,lParam);
可以成功,但如果是PostMessage可能会访存错误如何避免呢?是不是设置成全局变量就行了.先谢了.
前面消息正在处理时,后面来了的消息被丢掉。不会存很多依次处理的。postmessage我这边的程序20ms跑完一次,用Sleep()阻塞消息显示函数20ms,看到的基本就是这种情况。
如果你使用一个局部变量作为消息参数
例如
TCHARszText[20]=_T(”标题“);
::SendMessage(hWnd,WM_SETTEXT,(WPARAM)szText,lParam);
可以成功,但如果是PostMessage可能会访存错误如何避免呢?是不是设置成全局变量就行了.先谢了.
----------------------------------------
全局变量可以,不过并非是一个好的办法
最根本的解决方法还依赖于你的实际应用
有些时候你可以使用多线程的方式,使主线程中的任务分流
SendMessage就像系统调用回调函数
需要该函数执行完后才返回
PostMessage则就不是,先放到队列中等候处理
所以有可能参数szText所指的地址已经非法。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
长时间这样下去,消息队列塞满后
后面的消息会被丢掉,然后系统会发出"嘀"的一声?
为啥子不是前面的被丢掉?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
=============================
我个人认为应该是后面的消息被丢掉,因为系统中的每样东西都有生存期
一个消息在长时间得不到处理,系统就会提高其优先级,如果没有对应的处理函数
都会直接调用默认的DefWindowProc了,如果处理函数长期被占用而无法返回,那么可能
一直等待获得返回。这也就是我们经常看到的程序挂掉的情况了,呵呵,也许“消息队列”这个名字中的“队列”一词更为直白!满了丢弃,先进先出!
PostMessage采用“异步”处理message的方法,SendMessage采用“同步”处理message的方法,好坏看需要而定,难以一概而论.......
用2个自定义消息来实现。postmessage
假设以前的消息未MSG1,新加的消息为MSG2
当收到MSG1是开始你的工作,处理完成后发送MSG2消息,表示工作完成。
只有收到MSG2消息后,系统才有可能发送MSG1消息。
请问如何将mdb的数据转为EXCEL?????????????
命令行输入,如果直接回车就给缺省值如何实现
vc做通信程序连接的客户很多上千个,大家编写方式是怎样的?
vc++ 编程?急?
多线程,函数的static变量量,如何用Cmutex(或类似的方法)控制读写
用ADO查询ACCESS,结果显示在listCtrl
怎么用调试注入远程进程的代码?
拦截写和删除操作
网络间进程的通讯
急问:怎么做带lib的dll?
关于BITBLT的疑惑!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28476-2.html
中国不好战