我通过为std :: future实现monadic return / bind / join来在函数式语言范例中做一些小练习。作为一个实际的例子,我决定使用asio的async_xyz函数返回的std :: futures(可选)。
从那时起,我正在搜索我的代码,因为我的读取无限阻塞,直到我尝试了boost-asio / standalone-asio提供的示例代码,你可以在这里看到:
https://github.com/chriskohlhoff/asio/blob/master/asio/src/examples/cpp11/futures/daytime_client.cpp
异步读取调用之后的recv_length.get()/ .wait()(在第55行)也将无限地阻塞。我还将服务更改为使用端口5004以防万一存在套接字权限问题。
然后我深入研究了asio :: use_future的相当短的asio处理程序代码,你可以在这里看到:
https://github.com/chriskohlhoff/asio/blob/master/asio/include/asio/impl/use_future.hpp
一个小的调试输出显示,相应的值已经被读取,相应的以及正确的大小传递给第55行的代码。
因此,我设定了承诺的价值,未来要求价值。由于我发现其他任何人都有这个问题的其他事件,我认为我做了某事错了(从我对承诺/期货的有限经验中,asio代码看起来非常好)。
任何人都可以给我一个提示问题的提示吗?
我正在使用g ++版本4.9.2并使用
进行编译g++ -o daytime_client daytime_client.cpp -std=c++11 -pthread
(我已经尝试过另外附加-lpthread)
问候, 理查德