Multithreading 完成时使用zmq的异常

Multithreading 完成时使用zmq的异常,multithreading,c++11,zeromq,Multithreading,C++11,Zeromq,我试图使用ZMQ设置一个内部多线程中继,但在ZMQ中的某个地方完成ZMQ_对处理后,我遇到了一个异常,我只是不明白为什么。我把它简化为最小值,它与ZMQ继电器样本上的几乎相同,问题仍然存在。就我的一生而言,我看不出哪里出了错。我看到的唯一不同之处是,我使用的是std::thread,而不是posix线程 代码如下: void Message::GetMessage(const MessageDefn &defn) { zmq::context_t context(1);

我试图使用ZMQ设置一个内部多线程中继,但在ZMQ中的某个地方完成ZMQ_对处理后,我遇到了一个异常,我只是不明白为什么。我把它简化为最小值,它与ZMQ继电器样本上的几乎相同,问题仍然存在。就我的一生而言,我看不出哪里出了错。我看到的唯一不同之处是,我使用的是std::thread,而不是posix线程

代码如下:

void Message::GetMessage(const MessageDefn &defn) {

    zmq::context_t context(1);
    zmq::message_t message;

    zmq::socket_t receiver(context, ZMQ_PAIR);
    receiver.bind("inproc://parser");

    std::thread parser(&Message::ParseData, this, &context);

    receiver.recv(&message);

    // Error occurs here, after returning
    return;
}

void *Message::GetData( zmq::context_t *ctx) {
    zmq::socket_t sender(*ctx, ZMQ_PAIR);
    sender.connect("inproc://requestor");
    sender.send("Response", 8);
    return NULL;
};

void *Message::ParseData(zmq::context_t *ctx) {
    zmq::socket_t receiver(*ctx, ZMQ_PAIR);
    receiver.bind("inproc://requestor");

    std::thread requestor(&Message::GetData, this, ctx);

    zmq::message_t response(100);
    receiver.recv(&response);

    zmq::socket_t sender(*ctx, ZMQ_PAIR);
    sender.connect("inproc://parser");

    sender.send("Parsed", 6);

    return NULL;
}
以下是VS2013调试器返回的内容

The thread 'std::_LaunchPad<std::_Bind<1,void * __ptr64,std::_Pmf_wrap<void * __ptr64 (__cdecl Server::Message::*)(zmq::context_t * __ptr64) __ptr64,void * __ptr64,Server::Message,zmq::context_t * __ptr64>,Server::Message * __ptr64,zmq::context_t * __ptr64> >::_Go' (0x2460) has exited with code 0 (0x0).
Debug Error!

Program: D:\Projects\build\Debug\AppTest.exe

R6010
- abort() has been called


(Press Retry to debug the application)
线程“std::_LaunchPad::_Go”(0x2460)已退出,代码为0(0x0)。
调试错误!
程序:D:\Projects\build\Debug\AppTest.exe
R6010
-已调用abort()
(按“重试”调试应用程序)
编辑#2:

好的,我想知道ZMQ、VisualStudio2013和/或x64的nuget包的组合是否有问题。我正在使用nuget包。我创建了一个全新的64位控制台项目,除了hello world客户机之外,它什么都没有,然后我必须添加C++包装器< /P> 当我运行它时,我得到的只是发送Hello 0a(a实际上是一个带重音的a ie.`a),然后它挂起。从未处理过任何接收


我是否使用了错误的nuget软件包?是否有人在VS2013下运行此功能,并可以分享其设置方式

你能告诉我们(编辑你的问题)例外情况到底是什么吗!忘记把错误信息放进去了!谢谢,谢谢!在ZMQ调用之前,你能通过单步执行代码/插入断点来推断它发生在哪里吗?不幸的是,不能。它实际上发生在主函数GetMessage返回时。我甚至连一步都进不去。它只是死了。我试着在返回之前关闭插座,但这并没有改变任何事情。我也很困惑(