摘要: 在网上看到的一个问题,觉得很有意义:问:windows是消息轮询机制,那这样的程序将不断循环接收消息直到结束,岂不是很占用资源?如果我编写一个c++程序用循环来不断更新显示时间,cpu占用率会很高,那么windows是用什么办法使得那些消息轮询的程序占用很少资源呢?答:消息循环中,用到最多的函数是GetMessage()和PeekMessage(),GetMessage()函数在消息队列为空时,是不返回的,这时系统不会给线程分配时间片,线程就不会占用CPU资源。而PeekMessage函数即使消息队列是空,也会立即返回,而不是阻塞。消息循环之所以不会大量地占用CPU资源,就是因为GetMess 阅读全文
posted @ 2010-12-22 16:57 瑞恩多芬 阅读(508) 评论(0) 推荐(0)
摘要: 在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。 BackgroundWorker类中主要用到的有这列属性、方法和事件: 重要属性: 1、CancellationPending获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程); 2、IsBusy获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用I 阅读全文
posted @ 2010-12-22 15:59 瑞恩多芬 阅读(217) 评论(0) 推荐(0)