int MQTT_Thread(void) { BOOL loop; HANDLE wakeup; //if (!QueueUserAPC((PAPCFUNC)Wake_On_Events, GetCurrentThread(), 0)) { //std::cout << "QueueUserAPC eror " << GetLastError() << std::endl; } try { // Create a client mqtt mqtt::client cli(SERVER_ADDRESS, CLIENT_ID); mqtt::connect_options connOpts; connOpts.set_keep_alive_interval(20); connOpts.set_clean_session(true); wakeup = CreateEvent(NULL, false, false, NULL); if (wakeup == NULL) throw MainException("CreateEvent failed in thread."); events[0] = wakeup; events[1] = SystemTimerEvent; callback cb(wakeup); // Set the callback function defined in custom class callback cli.set_callback(cb); // Connect to the client cli.connect(connOpts); // Subscribe for topic all cli.subscribe("test", 1); // Publish using a message pointer. auto msg = mqtt::make_message(TOPIC, PAYLOAD1); msg->set_qos(QOS); cli.publish(msg); // Now try with itemized publish. cli.publish(TOPIC, PAYLOAD2, strlen(PAYLOAD2), 0, false); loop = true; //while (loop) { //DWORD ret = WaitForSingleObjectEx(wakeup, INFINITE, true); //DWORD ret = WaitForMultipleObjects(2,events,false,INFINITE); //std::cout << "Waked due event" << ret << std::endl; //SleepEx(INFINITE,true); //std::cout << "Waked due event from APC" << std::endl; } // Disconnect cli.disconnect(); } catch (const mqtt::exception& exc) { std::cerr << "Error: " << exc.what() << " [" << exc.get_reason_code() << "]" << std::endl; return 1; } catch (const MainException& e) { std::cout << e.what() << std::endl; } return 0; }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)