如何设计C++;美国石油学会 对于高级的C++程序技术,如模板,我是相当新的, 但是我正在为我正在进行的一个项目开发一个简单的API

如何设计C++;美国石油学会 对于高级的C++程序技术,如模板,我是相当新的, 但是我正在为我正在进行的一个项目开发一个简单的API,c++,api,C++,Api,您调用的函数或方法可能需要很长时间才能完成。 本质上,它是通过网络传输文件 看起来有点像这样 Client { int WriteFile(); int ReadFile(); } 但我想在这里有几个选择 调用WriteFile并阻止它 调用WriteFileAsync,但不阻止它 在异步版本中,我可以灵活地了解如何完成任务 能够轮询客户机,找出我当前的读写状态 手术 我对如何设计好C++模式有点不知所措。 避免使用boost是一项要求,但我可以使用类似boost的方法。 尽管如此,我

您调用的函数或方法可能需要很长时间才能完成。 本质上,它是通过网络传输文件

看起来有点像这样

Client
{
  int WriteFile();
  int ReadFile();
}
但我想在这里有几个选择

  • 调用WriteFile并阻止它
  • 调用WriteFileAsync,但不阻止它
  • 在异步版本中,我可以灵活地了解如何完成任务
  • 能够轮询客户机,找出我当前的读写状态 手术
  • 我对如何设计好C++模式有点不知所措。 避免使用boost是一项要求,但我可以使用类似boost的方法。 尽管如此,我还是浏览了一些标题,感到非常困惑。还有别的吗 对我来说,基本的模板编程让我感到困惑

    我所追求的是一种很好的方式,可以通知事件完成并能够等待
    一个需要完成的事件。

    我的建议是查看boost::asio的文档和教程(您可以将其用作boost的一部分或独立asio项目的一部分,但我猜要求不是外部LIB,而不仅仅是boost)

    通常,阻塞调用很容易定义,而非阻塞操作需要一些回调机制,以便在操作完成时通知用户操作的结果。再次,看看教程和文档,了解一个干净的界面,它比标题更容易浏览


    编辑:ASIO支持不同的协议,因此它可能比您需要的更复杂,请阅读其中一个示例,了解如何使用回调机制。

    关于异步调用的使用,我建议您阅读C++0x未来的设计

    基本上,这个想法是将代理交给用户,而不是普通类型。此代理知道线程,可用于:

    • 对完工情况进行民意测验
    • 得到结果
    您还可以添加一些聪明的机制,比如尝试在固定的时间内或在固定的时间点内获得结果,如果任务没有及时完成,则放弃(暂时)(例如,做其他事情,稍后再试,或者简单地继续并忘记这一点)


    C++0x的新线程API设计得非常巧妙(主要采用Boost.Threads之后的方法),可以让您深入了解如何设计多线程。

    您希望避免使用Boost,但希望采用类似Boost的方法。那么,什么是类似于boost的方法呢?我的意思是,如果有人向ASIO建议一个boost风格的解决方案,那就好了。唯一的问题是我不明白ASIO是如何实现的。模板地狱。