程序来不及处理消息该怎么处理呢?有人建议可以直接丢弃,但这样行的通吗?(顶者有分)

程序来不及处理消息该怎么办呢??有人建议可以直接丢弃,但这样行的通吗??(顶者有分)
程序流程大概是这样的:

        电脑PCI插槽上有一块定时计数器板卡,该计数器用来读取外部频率脉冲并定时产生溢出中断消息,现在外部过来的频率为1000Hz,即每秒钟定时计数器会接收到外部1000个脉冲.现在计数器设置为每读取10个脉冲就向我的MFC程序发送一个溢出中断消息,即此溢出中断消息每10ms就发送一次.
        现在我是用一个单独的轮询线程不断的查询该溢出中断消息的.每当我的轮询线程捕获到此溢出中断消息时就开辟另一个仿真线程开始我的仿真程序.现在的问题是有时候,大约每产生5万~10万次左右的中断消息会有一个溢出中断消息我的仿真程序来不及处理,即轮询线程捕获到了中断消息,但我上一次的仿真程序仍在进行当中.
        我现在是这样做呢,就是在仿真线程头尾加个线程锁,当中断消息来不及处理时就丢弃掉来不及处理的脉冲.但我觉的5万~10万次的中断消息就丢弃掉一个是不是丢弃的太频繁了呢?请问你们觉得多少次中断消息才可以丢弃一次呢?请问有这方面的教材吗?
        放远到一般情况下,对于程序来不及处理的消息,你们是怎么做的呢?直接丢弃吗?
不知道我有没有讲清楚,先谢谢了啊

------解决方案--------------------
那你不会加大你的cpu处理能力,让它能处理完不就啥事都没有了。
可以不可以丢是由你的客户才能决定的。
------解决方案--------------------
先up在看
------解决方案--------------------
有需求决定

------解决方案--------------------
1.关注一下。

2.我不太理解。你这情况真的是需要每次都开一个新线程吗?WHY?

3.你是多CPU,多核的机器吗?实时性要求到底如何的?

4.不能用个queue排队消息吗?
------解决方案--------------------
晕,win本来就不是实时操作系统, 你怎么保证每10毫秒就能获得处理器时间...
中断响应要尽可能的快,把必要的信息打个包插到事件队列里就应该返回了,其他费时的操作还是放在一个低优先级的过程中处理, 如果10微秒还不能把中断处理完,我就认为大概你的设计大概很有问题 ....
------解决方案--------------------
是否要丢弃,看你的需要......

既然明确是无法处理的,
那么丢弃可能也是必须的,
否则累积延迟更严重 ······
------解决方案--------------------
我想我没问明确, 有点误解啊.

1.我认为轮训线程是必要的.

2.我迷惑的是仿真线程是否每条消息, 就开个新的线程?

3.问多CPU, 多核, 是在推测是是否存在大量线程调度, 现场切换引起的额外负荷. 没法做性能测试啊, 说不好, 不过你应该测试一下. 并且应该测试下高峰情况下会同时开多少个线程. 线程数量也是稀缺资源啊.

4.关于queue是这样的. 我基本上觉得你可以考虑将消息进一个单一队列, 另一个线程负责处理.这样只要总体算法不差, 性能过的去, 就不会造成队列益处. 可以解决瞬间的不及响应. 但这样的方案有待调查你两条消息间是否有数据依赖的问题.

5.同样, 我还建议你考虑一下用I/O Complete Port的方式. 这个比较罗嗦的, 可以参考下windows系统编程方面的书.
------解决方案--------------------
对了. 如果一定是要每消息每线程, 我想你也应该考虑实现个线程池, 创建线程之类的操作, 也有不小代价.
------解决方案--------------------
即轮询线程捕获到了中断消息,但我上一次的仿真程序仍在进行当中
——如果这种效果因为可能累积而不敢进行缓冲,那就只能说客户的要求太高了,有点超出当前一定价格内的硬件处理能力了,搞不好也只能丢弃了。
------解决方案--------------------
提升软硬件处理能力。
看来多核位时代已提前到来了。
------解决方案--------------------
哎, 多核时代到了, 我也没准备好啊. 加紧向 steedhorse(晨星) 这些老鸟学习!!
------解决方案--------------------
可能要丢消息,系统有最大处理能力的,可以更客户谈谈
------解决方案--------------------
这种情况也只能提高硬件性能了吧,中段时间不能设大点吗
------解决方案--------------------
当然,我前面说的时指各种可能的办法都试过了之后。
如果你程序中有设计上的性能瓶颈,或者是其它的小bug,那最好不过了,修改一下设计或检查一下程序就搞定了。:P
------解决方案--------------------
友情顶
------解决方案--------------------
看你的实时重要,还是消息更重要?
用一线程专门管理消息队列,另一线程来处理消息。
------解决方案--------------------
可不可以将消息排队,然后一个一个地处理。
这样处理线程只需要一个。
------解决方案--------------------
如果处理过程中涉及一些可能造成等待的IO操作,那么还是多线程比较好。
但为每个消息新建一个新的线程总归不太好,还是通过消息队列加线程池的方式比较好。
------解决方案--------------------