草庐IT

asio_handler_invoke

全部标签

c++ - 使用 boost::asio::streambuf

寻找boost::asio(以及自己的boost)决定编写异步服务器。为了存储传入数据,我使用boost::asio::streambuf。在这里我有一个问题。当我收到来自客户端的第二条消息和随后的消息时,我看到缓冲区中包含来自先前消息的数据。尽管我在输入缓冲区调用了Consume方法。怎么了?classtcp_connection//Usingshared_ptrandenable_shared_from_this//becausewewanttokeepthetcp_connectionobjectalive//aslongasthereisanoperationthatrefer

c++ - 使用 Boost Asio 设置帖子队列大小限制?

我正在使用boost::asio::io_service作为基本线程池。一些线程被添加到io_service,主线程开始发布处理程序,工作线程开始运行处理程序,一切都结束了。到目前为止,一切都很好;与单线程代码相比,我获得了不错的加速。但是,主线程有数百万的东西要发布。它只是不断地发布它们,比工作线程处理它们的速度快得多。我没有达到RAM限制,但将这么多东西排入队列仍然有点愚蠢。我想要做的是为处理程序队列设置一个固定大小,并在队列已满时阻止post()。我在BoostASIO文档中没有看到任何选项。这可能吗? 最佳答案 我正在使用信

Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/Datatype

报错:ERRORc.j.f.w.e.GlobalExceptionHandler-[handleException,83]-Handlerdispatchfailed;nestedexceptionisjava.lang.NoClassDefFoundError:javax/xml/bind/DatatypeConverterorg.springframework.web.util.NestedServletException:Handlerdispatchfailed;nestedexceptionisjava.lang.NoClassDefFoundError:javax/xml/bind

c++ - 使用类特定的 set_new_handler

对于类特定的new_handler实现,我在“effectivec++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的new_handler?void*X::operatornew(size_tsize){new_handlerglobalHandler=//installX'sstd::set_new_handler(currentHandler);//handlervoid*memory;try{//attemptmemory=::operatornew(size);//allocation}catch(std::bad_alloc&)

c++ - boost::asio 的扩展被中断后挂起

鲍里斯的article向我们展示了如何创建boost::asio的扩展。我尝试在已注册的信号上添加signal_set和async_wait。然后程序挂起,直到触发第二个SIGINT。虽然,我想只在一个信号内正确完成它。这是我的代码。我在Ubuntu上使用gcc-4.6.3和boost-1.52.0对其进行了测试。编译-gcc-I/boost_inc-L/boot_libmain.cpp-lpthread-lboost_system-lboost_thread#include#include#include#include#include#include#include#include

c++ - boost::asio async_receive_from UDP 端点在线程之间共享?

Boostasio专门允许多个线程调用io_service上的run()方法。这似乎是创建多线程UDP服务器的好方法。但是,我遇到了一个问题,我正在努力寻找答案。查看典型的async_receive_from调用:m_socket->async_receive_from(boost::asio::buffer(m_recv_buffer),m_remote_endpoint,boost::bind(&udp_server::handle_receive,this,boost::asio::placeholders::error,boost::asio::placeholders::by

c++ - Q_INVOKABLE 方法返回自定义 C++ 类型

我有一个C++方法Q_INVOKABLE。我可以从QML调用此方法,它在返回基本类型(如QString)时有效。但我不能使用自定义类型。我应该怎么做?我应该返回一个QVariant吗?理想情况下,如果可能的话,我想返回一个指向我的自定义类型的指针。编辑我这样做:qmlRegisterType("Mine",1,0,"MyType");qmlEngine->rootContext()->setContextProperty("testObj",newMyType());我可以使用testObj全局对象或创建MyTypeQML组件。但是我不能在某些javascript代码中将它用作Q_IN

c++ - std::invoke 没有匹配的重载函数发现 VS 2015 中给出的错误

我是C++和SDL的新手,我正在尝试创建一个不断更新屏幕的线程,但我不断收到以下错误:'std::invokenomatchingoverloadedfunctionfound'和'Failedtospecializefunctiontemplate'unknown-typestd::invoke(Callable&&,_Types&&...)''main.cppintmain(intargc,char**argv){usingnamespacestd::placeholders;boolgameover=false;inttest;std::stringfilepath=getRes

c++ - 将 boost::asio 线程池用于通用任务

在thisblog我找到了一个关于如何使用boost::asio创建简单线程池的非常简洁的示例。我基本上想像这样使用它:#include#include#includeintmain(intargc,char*argv[]){asio::io_serviceio_service;asio::io_service::workwork(io_service);std::vectorthreadPool;for(size_tt=0;t据我所知,Boost::asio主要用于网络IO。但是,我主要想将它用于通用功能。并发问题将使用asio::io_service::strand来解决。所以我的

c++ - 在 boost::asio 中使用 write() 发送原始数据

我最近决定为我的套接字使用boost::asio,但现在我遇到了一个问题:似乎缺少文档。我想做的是编写一个函数来发送包含以下结构的消息:2个字节的无符号整数(uint16_t)用于操作码所有字节之后的所有字节(灵活数量)是任何类型的数据(转换为void*)。这些数据将根据操作码进行操作例如,如果操作码为1,可能定义为OPCODE_LOGIN,则操作码后面的字节可能包含包含登录信息等的字符串。boolsendMessage(tcp::socket*sock,uint16_topcode,void*data){void*fullData=malloc(sizeof(uint16_t)+si