代码之家  ›  专栏  ›  技术社区  ›  hookenz

如何设计一个C++ API

  •  1
  • hookenz  · 技术社区  · 14 年前

    对于高级的C++程序技术,如模板,我是相当新的, 但我正在为我正在进行的项目开发一个简单的API。

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

    看起来有点像这样。

    Client
    {
      int WriteFile();
      int ReadFile();
    }
    

    但我想在这里有几个选择。

    1. 调用writefile并阻止它。
    2. 调用WriteFileAsync,不要让它阻塞。
    3. 在异步版本中,要灵活处理我如何知道任务完成的问题。
    4. 能够用我当前的读或写对客户端进行轮询,以确定它在哪里。 操作。

    对于如何巧妙地设计C++方式,我有点不知所措。 这是避免使用Boost的要求,但我可以使用类似Boost的方法。 尽管如此,我还是浏览了一些标题,非常困惑。超越一切 对于我来说,基本的模板编程让我感到困惑。

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   David Rodríguez - dribeas    14 年前

    我的建议是查看Boost::ASIO的文档和教程(您可以将其用作Boost的一部分或独立的部分 阿西奥 项目,但我猜需求不是外部libs,而不仅仅是没有提升)。

    通常,阻塞调用定义起来很简单,而非阻塞操作需要一些回调机制,以便在操作完成时通知用户操作结果。同样,请看一下教程和文档,了解一个干净的界面,这样浏览起来比浏览标题容易得多。

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

        2
  •  1
  •   Matthieu M.    14 年前

    关于异步调用的使用,我建议阅读 future 对于C++ 0x。

    基本上,这个想法是将代理交给用户,而不是简单的类型。此代理了解线程,可用于:

    • 关于完成情况的投票
    • 得到结果

    您还可以添加一些聪明的机制,例如尝试在固定的持续时间内获得结果,或者在某个固定的时间点之前获得结果,如果任务没有及时完成,则放弃(暂时)(例如,做其他事情,稍后再试,或者简单地继续并忘记这一点)。

    C++0x的新线程API已经非常巧妙地设计(主要是在Booost。线程之后),它将给您提供关于如何设计多线程的深刻见解。