据我所知,同步和异步操作之间的主要区别.即write()或read()VS async_write()并且async_read()是前者,不返回,直到操作完成-或无差错,以及最后的,立即返回.
由于异步操作由一个io_service.run()在受控操作完成之前未完成的操作控制.在我看来,顺序操作中涉及与POP3等协议的TCP/IP连接,其中操作是如下序列:
C: <connect>
S: Ok.
C: User...
S: Ok.
C: Password
S: Ok.
C: Command
S: answer
C: Command
S: answer
...
C: bye
S: <close>
Run Code Online (Sandbox Code Playgroud)
同步/异步运算符之间的区别没有多大意义.
当然,在这两种操作中,总是存在程序流程在某些情况下无限期停止的风险 - 使用计时器 - 但我想知道一些更多的授权意见.
我必须承认这个问题定义不明确,但我想听听一些关于何时使用其中一个的建议.我在使用MS Visual Studio调试关于我正在使用的POP3客户端中的异步SSL操作时遇到了问题,有时候认为在这个问题上使用异步可能是个坏主意.
boost :: optional支持in_place构造,如下所示:
#include <boost/optional.hpp>
#include <boost/utility/typed_in_place_factory.hpp>
class Foo
{
int a,b;
public:
Foo(int one, int two) : a(one),b(two) {}
};
int main()
{
boost::optional<Foo> fooOpt(boost::in_place<Foo>(1,3));
}
Run Code Online (Sandbox Code Playgroud)
一旦我们有一个初始化的fooOpt,有没有一种方法可以为它分配一个新的Foo而不创建一个临时的?
就像是 :
fooOpt = boost::in_place<Foo>(1,3);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我目前正在研究UDP套接字客户端.我目前注意到内存泄漏,我已经尝试了几个希望压制它的东西,但它仍然占上风.在我的主力,我有一个char*已经malloc'd.然后我调用下面的函数来发送数据:
void Send(const char* data, const int size) {
Socket.async_send_to(boost::asio::buffer(data, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error));
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,它将始终泄漏内存.但是,如果我注释掉async_send_to呼叫,则内存保持一致.我已经尝试了几种变体(见下文),但它们似乎只是为了加速内存泄漏.
有几个注意事项,在调用完成之前,有可能char*传递给Send free.但是,在我的变化中,我已采取预防措施来处理这个问题.
变化1:
void Send(const char* data, const int size) {
char* buf = (char*)malloc(size);
memcpy(buf, data, size);
Socket.async_send_to(boost::asio::buffer(buf, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error, buf));
}
void HandleSendTo(const boost::system::error_code& ec, const char* buf) {
free(buf);
}
Run Code Online (Sandbox Code Playgroud)
变化2:
class MulticastSender {
char* Buffer;
public:
void Send(const char* data, const int size) {
Buffer = (char*)malloc(size); …Run Code Online (Sandbox Code Playgroud) c++ ×4
boost-asio ×3
boost ×2
asynchronous ×1
memory ×1
memory-leaks ×1
optional ×1
synchronous ×1
tcp ×1