提升 ASIO Async_receive崩溃程序
Boost ASIO Async_receive crashing program
在大多数情况下,我的程序运行良好,但偶尔会崩溃。如果我在运行中途暂停程序,它也会崩溃。任何关于为什么的见解将不胜感激!我认为这可能是由于async_read_some在实际执行之前被多次调用。
主.cpp:
while(true)
{
sensor->update();
if (sensor->processNow == 1)
{
sensor->process(4);
sensor->processNow = 0;
sensorReadyForUpdate = 1;
}
}
构造 函数:
sensorHandler::sensorHandler(std::string host, int port, std::string name) :
socket_(ioservice_),
sensorAddress_(boost::asio::ip::address::from_string(host), port),
dataRequested_(false),
dataReady_(false)
{
}
更新功能:
bool sensorHandler::update()
{
ioservice_.poll_one();
if (inOperation == false)
{
inOperation = true;
socket_.async_read_some(boost::asio::buffer(receiveBuffer, receiveBuffer.size()), boost::bind(&sensorHandler::receiveCallback, this, _1, _2));
return success;
}
}
接收回调函数:
bool sensorHandler::receiveCallback(const boost::system::error_code& error, std::size_t bytes_transferred)
{
std::cout << "success - in receiveCallBack" << std::endl;
processNow = 1;
inOperation = false;
}
包括:
#include "sensorHandler.h"
#include <boostbind.hpp>
#include <boostasiowrite.hpp>
#include <iostream>
#include <windows.h>
头文件:
class sensorHandler
{
public:
sensorHandler(std::string host, int port, std::string name);
~sensorHandler();
bool connect();
bool update();
boost::array<char, 400000> receiveBuffer; // was 50000
}
我可能错过了问题的重点,但是您要在循环中运行异步操作的问题吗?
实现此目的的经典方法是通过调用链接,因此在完成处理程序中,您将下一个操作排队:
bool IFMHandler::receiveCallback(const boost::system::error_code& error, std::size_t bytes_transferred)
{
/*code to process buffer here - ends with processNow = 1 and inOperation = false*/
if (!error) {
socket_.async_read_some(boost::asio::buffer(receiveBuffer,
receiveBuffer.size()), boost::bind(&IFMHandler::receiveCallback, this, _1, _2));
}
}
所以,现在你可以简单地打电话
ioservice_.run();
链条将自行运行。
相关文章:
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序