(Visual Studio 2017, C ++ 17, cppzmq 4.6.0)
Я новичок в программировании MF C. Я просто хочу создать сервер ответов ZeroMQ в потоке, который всегда будет готов принимать запросы пользователей и запускать определенные функции в моей программе MF C.
void zmq_server() {
zmq::context_t context{ 1 };
zmq::socket_t socket{ context, zmq::socket_type::rep };
socket.bind("tcp://*:5555");
const std::string data{ "Hi" };
while (1) {
zmq::message_t request;
socket.recv(request, zmq::recv_flags::none);
//std::cout << "Received " << request.to_string() << std::endl;
socket.send(zmq::buffer(data), zmq::send_flags::none);
}
}
Я думал, что смогу запустить его как поток, если я просто вставлю его там, где инициализируется диалог:
BOOL CMFCApplication2Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// TODO
// thread t1(zmq_server ) <============== PROGRAM DOESN'T RUN WITH THIS LINE
return TRUE;
}
Но диалог даже не начинается, и мне интересно, потому что это неправильный способ запускать сервер ZMQ на нить. Как я могу запустить его в потоке программы MF C?