草庐IT

c++ - undefined reference `pthread_create' 使用 ASIO 和 std::thread 制作 C++11 应用程序时出错

我设置了Eclipse(实际上是XilinxSDK,但基于Eclipse)和g++4.9.2来编译一个使用独立ASIO的项目,我在属性->C/C++中使用了-std=c++11Build->Settings->ToolSettings->Otherflags以便它可以使用所有C++11特性进行编译。我还在C/C++GeneralSymbols中设置了ASIO_HAS_STD_THREAD,ASIO_STANDALONE等等,我希望ASIO头文件会使用std::thread而不是线程。但是,我仍然看到来自make的错误:undefinedreferencetopthread_create

c++ - 更好地提升 asio deadline_timer 示例

我正在寻找一个更好的boost::asio::deadline_timer示例给出的例子总会超时,调用close方法。我尝试在计时器上调用cancel(),但这会导致立即调用传递给async_wait的函数。在异步tcp客户端中使用计时器的正确方法是什么? 最佳答案 您提到在计时器上调用cancel()会导致立即调用传递给async_wait的函数。这是预期的行为,但请记住,您可以检查传递给计时器处理程序的错误以确定计时器是否已取消。如果定时器被取消,则operation_aborted被传递。例如:voidhandleTimer(

c++ - boost::asio async_read 保证读取所有字节

我有一个服务器从客户端接收压缩字符串(用zlib压缩),我使用的是async_receive来自boost::asio库来接收这个字符串,但事实证明不能保证所有字节都将被接收,所以我现在必须将它更改为async_read.我面临的问题是接收到的字节大小是可变的,所以我不确定如何使用async_read不知道要接收的字节数。随着async_receive我只有一个boost::array,然而这是一个不一定完全填满的缓冲区。我想知道是否有人可以建议一个解决方案,即使我不知道要提前接收的字节数,我也可以使用async_read?voidtcp_connection::start(boost

c++ - 如何检查套接字是否在 Boost.Asio 中关闭?

检查远程连接端的套接字是否关闭的最简单方法是什么?socket::is_open()返回true,即使它在远程端关闭(我正在使用boost::asio::ip::tcp::socket).我可以尝试从流中读取并查看它是否成功,但我必须更改我的程序逻辑以使其以这种方式工作(我不希望此时从流中提取数据支票)。 最佳答案 只需在您的async_receive处理程序中检查boost::asio::error::eof错误。这意味着连接已关闭。这是唯一正确的方法。 关于c++-如何检查套接字是否

android - Android 设备上的 Boost Asio deadline_timer 不会在到期时间触发,而是在稍后的时间触发

我们正在尝试在Android设备上使用boostasiodeadline_timers。我们有一个要求,我们需要每100毫秒触发一个定时器。我使用了如下代码。但是,计时器似乎每1秒触发一次。我们应该在Android系统中进行哪些微调才能使boostasio截止时间计时器按预期工作?注意:以下代码在普通linux系统上按预期工作。是什么让它在Andorid系统上的工作方式不同?代码:voidprint(asio::deadline_timer*ptimer,constasio::error_code&err){structtimevaltval;if(0==gettimeofday(&t

c++ - boost::asio::async_write() 与 boost::asio::write()

在将数据缓冲区传输到线路上所花费的时间方面是否有任何优势如果你使用boost::asio::write(m_socket,asio::buffer(dataOut_,len),asio::transfer_all());代替boost::asio::async_write(m_socket,boost::asio::buffer(hbs,sizeof(hbs)),boost::bind(&Client::handle_pulse,this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transfer

c++ - 如何等待所有 boost 完成 :asio's stackful coroutines?

我正在用asio::spawn启动一些协程,我想等到所有协程都完成后再做一些其他工作。如何实现?控制流程如下:asio::spawn(io,[](asio::yield_contextyield){...//startingfewcoroutinesasio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spa

c++ - boost::asio::io_service 优先级如何工作?

我正在使用boost::asio::io_service来管理一些异步TCP通信。这意味着我创建了一个boost::asio::ip::tcp::socket并将io_service提供给它。当我开始交流时,它的示意图如下:异步解析->回调->异步连接->回调->异步写入->回调->异步读取我省略了resolve和bind等部分。假设套接字已绑定(bind)到端口并且主机名已解析(因此连接意味着建立到端点的真实连接)现在的重点是我可以使用相同的io_service对象启动多个异步连接。这意味着,例如,在我的io_service线程中,程序将要AsyncWrite一些数据,主线程将调用A

c++ - mmorpg 服务器端的网络库(libuv/boost::asio?)

我目前正在重写一个非常古老的mmorpg的服务器端,我一直在寻找一个很好的开源网络库来与C/C++一起使用。由于客户端已经存在,我不能使用任何强制执行某种数据包结构或通信的库(例如,RakNet)。服务器将主要在三个不同的端口上使用UDP。在网上搜索后,我发现了boost::asio和libuv。boost::asio似乎是一个成熟的选择,因为我已经在使用boost,但我读到他们的UDP实现有点差,并且由于某些原因它无法实现多核处理器的最大性能使用epoll时锁定。libuv看起来很棒,是事件驱动的,有一个大项目支持,但目前还没有此类项目使用它,所以我对使用它有疑问。大家怎么看?我可以

c++ - 使用 boost::asio 丢弃数据

我在异步模式下使用boost::asio,我想跳过/丢弃/删除通过TCP发送给我的消息。我想这样做是因为我已经阅读了消息的标题,并且我知道我对此不感兴趣。消息可能很大,所以我宁愿不为它分配空间,甚至最好不要将它传输到用户空间。我看到了boost::asio::null_buffers,但它似乎不适用于此处(参见https://svn.boost.org/trac/boost/ticket/3627)。 最佳答案 据我所知,BSD套接字接口(interface)没有提供此功能。您总是必须读入缓冲区。现在,为了不分配巨大的缓冲区,您可以