簡體   English   中英

Boost ASIO Async_receive崩潰程序

[英]Boost ASIO Async_receive crashing program

在大多數情況下,我的程序運行良好,但有時會崩潰。 如果我在運行中暫停程序,它也會崩潰。 關於為什么的任何見解將不勝感激! 我認為這可能是由於async_read_some在實際執行之前被多次調用。

Main.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 <boost\bind.hpp>
#include <boost\asio\write.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(); 

連鎖店將自行運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM