W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #1 我用线程更新主窗体的显示,发了一个自定义的消息给主窗体,但是发现有时候主窗体会多次处理同一个消息,就是处理消息的方法会触发多次。 请问这是什么原因呢,另外再有时候也是正常的。
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #2 我用线程更新主窗体的显示,发了一个自定义的消息给主窗体,但是发现有时候主窗体会多次处理同一个消息,就是处理消息的方法会触发多次。 请问这是什么原因呢,另外再有时候也是正常的。
K kk2000 Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #3 使用线程发送消息, 这样就很难说到底发了多少次给主窗体了. 而且postmessage是异步执行的, 它只是负责把消息放到消息队列 里面, 系统什么时候处理, 或者不处理它都不管了. 所以说当线程 运行时, postmessage 消息给主窗口多少次消息是个未知数, 它只是 发送了就返回了. 呵呵. 你修改为sendmessage看看吧, 起码它是个同步 执行的, 再不行只能通过其他内核对象来处理了! 比如事件对象等
使用线程发送消息, 这样就很难说到底发了多少次给主窗体了. 而且postmessage是异步执行的, 它只是负责把消息放到消息队列 里面, 系统什么时候处理, 或者不处理它都不管了. 所以说当线程 运行时, postmessage 消息给主窗口多少次消息是个未知数, 它只是 发送了就返回了. 呵呵. 你修改为sendmessage看看吧, 起码它是个同步 执行的, 再不行只能通过其他内核对象来处理了! 比如事件对象等
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #4 kk2000 你好, 我的线程的状态是不一样的。因为我通过消息传递的数据是不同的,所以不同线程PostMessage后,我可以通过观察获得的数据确定是哪个线程发的消息。 我调试时发现当一个线程PostMessage之后,主窗体的消息处理方法会连续多次触发,每次得到的数据都是同一个。所以感觉有点奇怪。
kk2000 你好, 我的线程的状态是不一样的。因为我通过消息传递的数据是不同的,所以不同线程PostMessage后,我可以通过观察获得的数据确定是哪个线程发的消息。 我调试时发现当一个线程PostMessage之后,主窗体的消息处理方法会连续多次触发,每次得到的数据都是同一个。所以感觉有点奇怪。
K kk2000 Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #5 其实这个不奇怪的! 你知道线程是这样执行的, 几乎系统每隔20毫秒(不一定是这个数啊)触发一次, 每当你传送数据给这个线程之前你能确保能传一个不同数据给他吗? 如果这个线程运行了两次, 那么发送两次到消息队列了!那么他就处理相同数据发送给消息处理程序了.
其实这个不奇怪的! 你知道线程是这样执行的, 几乎系统每隔20毫秒(不一定是这个数啊)触发一次, 每当你传送数据给这个线程之前你能确保能传一个不同数据给他吗? 如果这个线程运行了两次, 那么发送两次到消息队列了!那么他就处理相同数据发送给消息处理程序了.
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #6 我的线程提交数据都是不同的。 例如 thread1A thread1B thread1C thread1D ... 我在调试的时候跟踪到一个线程postmessage 一次后,发现主窗体的消息相应方法有时会连续多次触发,并且得到的数据都是 thread1A thread1A thread1A thread1A , 而且这个次数是不定的有时两次,有时十几次。
我的线程提交数据都是不同的。 例如 thread1A thread1B thread1C thread1D ... 我在调试的时候跟踪到一个线程postmessage 一次后,发现主窗体的消息相应方法有时会连续多次触发,并且得到的数据都是 thread1A thread1A thread1A thread1A , 而且这个次数是不定的有时两次,有时十几次。
K kk2000 Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #7 thread1A thread1B thread1C thread1D 你的上面几个线程都是发送同一个消息吗! 你怎么调度你的线程啊.
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #9 代码比较长。 我再想办法用其他的代码模拟一下,不过不行。 另外我的线程中有 Synchronize 方法, 我在把这个Synchronize都用post消息代替,看看是不是一起使用造成的。
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-08 #10 to kk2000 我的线程不是发的一个数据, thread1 发 thread1A thread1B thread1C ... 都是间隔发的。 thread2 发 thread2A thread2B thread2C ... 这里就是用来描述一下数据都是不同的,所以不可能连续发 thread1A thread1A ...
to kk2000 我的线程不是发的一个数据, thread1 发 thread1A thread1B thread1C ... 都是间隔发的。 thread2 发 thread2A thread2B thread2C ... 这里就是用来描述一下数据都是不同的,所以不可能连续发 thread1A thread1A ...
C cqwty Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-12 #11 我也遇到这样的问题,查了一些东西,不明白,下午我把我的代码贴上来大家看看,帮忙处理一下。
W WQmeng Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-13 #12 这个问题困扰了1天也没有解决,最后还是使用了Syn方式。
C cqwty Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-14 #13 只能够使用同步的方式来处理了嘛?但是同步的方式感觉不是很好,怎么没有高手啊?