繁体   English   中英

使用STL容器作为成员时cpprestsdk处理程序类崩溃

[英]cpprestsdk handler class crashes when using STL container as member

我使用cpprestsdk编写了一个简单的代码。 我将地图( records )用作CommandHandler类的成员,并在公共方法( has_record() )中对其进行操作。

它可以在handler.open().wait()运行之前运行,但是当我在请求中调用它时,它就会崩溃!

这是我的代码:

#define BOOST_DATE_TIME_NO_LIB

#include <string>
#include <vector>
#include <cpprest/uri.h>
#include <cpprest/http_listener.h>
#include <cpprest/asyncrt_utils.h>

using namespace std;
using namespace web;
using namespace http;
using namespace utility;
using namespace http::experimental::listener;

class CommandHandler
{
public:
    CommandHandler(utility::string_t url);
    pplx::task<void> open() { return m_listener.open(); }
    pplx::task<void> close() { return m_listener.close(); }
    bool has_record();

private:
    std::map< std::string, unsigned int > records;
    void handle_get_or_post(http_request message);
    http_listener m_listener;
};
bool CommandHandler::has_record()
{
    return records.size() > 0 && records.find("1") != records.end();
}

CommandHandler::CommandHandler(utility::string_t url) : m_listener(url)
{
    m_listener.support(methods::GET, std::bind(&CommandHandler::handle_get_or_post, this, std::placeholders::_1));
    m_listener.support(methods::POST, std::bind(&CommandHandler::handle_get_or_post, this, std::placeholders::_1));
}

void CommandHandler::handle_get_or_post(http_request request)
{
    if(this->has_record())
        request.reply(status_codes::OK, 1);
    else
        request.reply(status_codes::OK, 0);
};


int main(int argc, char** argv)
{
    try
    {
        utility::string_t address = U("http://127.0.0.1:9595");
        uri_builder uri(address);
        auto addr = uri.to_uri().to_string();

        CommandHandler handler(addr);
        if(handler.has_record())
            std::cout<<"work!";
        handler.open().wait();

        ucout << utility::string_t(U("Listening for requests at: ")) << addr << std::endl;
        ucout << U("Press ENTER key to quit...") << std::endl;
        std::string line;
        std::getline(std::cin, line);

        handler.close().wait();
    }
    catch (std::exception& ex)
    {
        ucout << U("Exception: ") << ex.what() << std::endl;
        ucout << U("Press ENTER key to quit...") << std::endl;
        std::string line;
        std::getline(std::cin, line);
    }

    return 0;
}

我发现了问题,但不明白为什么会抛出该问题。 问题在以下代码行中:

request.reply(status_codes::OK, 0);

0引发异常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM