((Visual Studio 2017,C ++ 17,cppzmq 4.6.0)] >>
我是MFC编程的新手。我只是想在一个线程上创建一个ZeroMQ答复服务器,该服务器将随时准备在我的MFC程序中接收用户请求并运行某些功能。
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服务器的正确方法。如何在MFC程序的线程上运行它?
(Visual Studio 2017,C ++ 17,cppzmq 4.6.0)我是MFC编程的新手。我只是想在一个线程上创建一个ZeroMQ答复服务器,该服务器将随时准备接收用户请求并运行某些...
您应该使std ::成为您的对话框类的成员变量,并在onInit中对其进行初始化。这样,您可以在程序运行期间将线程保持在范围内(并且至关重要的是,可以在程序退出时优雅地停止线程)。