完成后使用zmq的异常

时间:2015-02-07 13:06:29

标签: multithreading c++11 zeromq

我正在尝试使用ZMQ设置内部多线程中继,但是在ZMQ内某处完成ZMQ_PAIR处理后我得到一个异常,我只是没有看到原因。我把它简化到最低限度,它几乎与ZMQ中继样本http://zguide.zeromq.org/cpp:mtrelay上的相同,但问题仍然存在。对于我的生活,我看不出我哪里出错了。我唯一看到的不同是我使用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)

编辑#2:

好的,所以我想知道ZMQ,Visual Studio 2013和/或x64的nuget包的某些组合是否存在问题。我正在使用nuget包http://www.nuget.org/packages/libzmq_vc120。我创建了一个全新的64位控制台项目,它只有hello world客户端。 http://zguide.zeromq.org/cpp:hwclient,然后我必须添加c ++包装器https://github.com/zeromq/cppzmq/blob/master/zmq.hpp

当我运行它时,我得到的只是发送Hello 0a(a实际上是一个重音符号.`a),然后它挂起。没有得到任何收到。

我使用错误的nuget包吗?有没有人在VS2013下运行,可以分享他们如何设置它?

0 个答案:

没有答案