c++高手给我解释一下WaitForObject函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++高手给我解释一下WaitForObject函数相关的知识,希望对你有一定的参考价值。
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
表明通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。
但是,但是,如果把MT_INTERVAL设置成0呢,是什么意思,有事件有信号时怎么运行,没信号时呢?
把MT_INTERVAL设置成0,后,这个函数就不再等待,立刻返回你的g_event的状态,否则是需要等待MT_INTERVAL毫秒后才返回的。
有信号和没信号怎么运行?
WaitForSingleObject函数本身是给你让线程同步用的。
你的这条线程是否运行下去,或者怎么运行,需要依靠另外一条线程发送信号时,那就要用到这个函数,而这跳线程怎么运行,你自己不清楚吗?
以下参考资料是这个函数的详细解释,楼主可以仔细看下。
参考资料:http://baike.baidu.com/view/908866.htm?fr=ala0_1
本回答被提问者采纳C++:你在使用 Loki 还是 Boost 作为函子?
【中文标题】C++:你在使用 Loki 还是 Boost 作为函子?【英文标题】:C++: Are YOU using Loki or Boost for functors ? 【发布时间】:2011-03-08 17:31:28 【问题描述】:我一直在阅读 Alexandrescu 的书《现代 C++ 设计》,他使用的技术给我留下了深刻的印象,因此我想将 Loki library 添加到我的应用程序中。
但是,经过进一步调查,我发现我已经在使用的 boost 提供了许多类似的功能(尽管不是全部,例如,我在 boost 中找不到单例)
由于基于策略的设计和仿函数,我最感兴趣的是使用 loki。
对我来说,boost 和 loki 各有利弊。我对 loki 的主要担忧是糟糕的文档(图书馆不再与书绑定),但在我看来,loki 在某些领域比 boost 更强大和灵活(我可能在那个方面错了)
在选择将 boost 或 loki 用于函子和策略之前,我想知道在现实生活中使用它们的人的意见。
有时在纸面上看起来很不错,但实际使用时却有一些缺点:)
【问题讨论】:
没有单例是 Boost 的优点之一。世界最不需要的就是鼓励使用更多单例。 【参考方案1】:Alexandrescu 有非常有趣的想法(类型列表、基于策略的类模板等),但其中很多都在 boost 中得到了改进,并在更广泛的编译器中进行了可移植性和正确性测试。
出于这些原因,我建议尽可能选择 boost。尽管如此,现代 C++ 设计仍然对 C++ 的灵活性提供了很多洞察力,并深入了解了一个人的思维(非常好的思维)以解决许多常见的编程问题。
例如,基于策略的智能指针是一个非常巧妙的想法,但我们可以找到为什么 boost 作者选择不以这种方式实现 shared_ptr 和 scoped_ptr:
A.参数化不鼓励用户。 shared_ptr 模板是小心翼翼的 精心设计,以满足共同的需求,而无需 广泛的参数化。某天 高度可配置的智能指针可能 被发明出来也很容易 使用并且很难误用。直到 那么,shared_ptr 就是智能指针 广泛的选择 应用程序。 (有兴趣的人 基于策略的智能指针应该 阅读 Andrei 的 Modern C++ Design 亚历山大雷斯库。)
如果您确实需要各种各样的智能指针,并且您和您的团队习惯于广泛使用模板参数化,那么实现智能指针的基于策略的方法可能适合您。但是,scoped_ptr 和 shared_ptr(连同weak_ptr)往往会非常彻底地完成这项工作。策略类的组合行为可能更适合用于具有多种有用组合的事物。
尽管如此,Alexandrescu 仍有一些有趣的提议,但 boost 尚未解决。例如,MOJO 仍然非常有用,直到编译器更好地实现移动构造函数,或者直到我们可以使用 C++0x 中的右值引用。他对实现内存分配器也有一些非常有趣的想法。
至于问题,我们在商业项目中使用了 mojo 所需的部分 Loki,但主要是在适当的时候进行增强。
【讨论】:
【参考方案2】:可能要考虑的一件事是,boost 库在接受期间必须经过同行评审过程。当然,在那之后,我相信对发生的变化几乎没有监督,但至少在它们被接受之前会有一些审查。洛基只是一个人的愿景。当然 Alexandrescu 相当不错,但仍然......这都是他的想法,没有比这更进一步的评论了。
【讨论】:
【参考方案3】:我在整个 C++ 环境中使用 Boost,就像对标准库的扩展(使用 VC9 和 VC10)。
我不会在所有项目中使用它。
我在个人项目(主要是游戏)中使用它,我可以完全控制依赖关系。
我在一个大型游戏项目中使用 boost::function(与 boost 中的其他几个库)。
Loki 也不错,但我觉得没必要。我认为我正在考虑使用的库的唯一部分是单例,但我正在使用目前足够好的自定义库。
【讨论】:
【参考方案4】:C++0x 是我用于快速函数对象的。
【讨论】:
如果我错了,请纠正我,但是 gcc 和 Visual Studio 2008 都不完全支持 C++0x,或者是吗? @Dinaiz:您可以获得最新版本的 GCC,其中包含大量 C++0x,包括我相信的 lambda。 VS2008 没有,但您没有在问题中指定编译器。 是的,这是真的,我没想到答案会涉及到取决于编译器的东西:) @DeadMG :"VS2008 has none" 你错了,vs2008 支持 TR1 表示数组、正则表达式、unordered_set/map、元组、shared_ptr 和 std::function (连同 bind 和 mem_fn) 是的,但是大部分 TR1 是 C++0x 的一部分,所以 TR1 可以被“视为”为子集或 C++0x以上是关于c++高手给我解释一下WaitForObject函数的主要内容,如果未能解决你的问题,请参考以下文章
我想学习网络爬虫,哪位高手能给我发代码?c、C++都可以,先谢谢了。邮箱:985640787@qq.com