neosmart_event_t event[2]; void test1() { boost::this_thread::sleep_for(boost::chrono::milliseconds(1000)); SetEvent(event[0]); std::cout << "Set event 1" << std::endl; } void test2() { boost::this_thread::sleep_for(boost::chrono::milliseconds(500)); SetEvent(event[1]); std::cout << "Set event 2" << std::endl; } main() { event[0] = CreateEvent(); event[1] = CreateEvent(); int arg = 7; switch (WaitForMultipleEvents(event, 2, true, 5000, arg)) { case 0: std::cout << "Sucess" << std::endl; break; case 1: std::cout << "One event left" << std::endl; break; case 2: std::cout << "Timeout" << std::endl; break; default: std::cout << "Something unexpected" << std::endl; break; } boost::thread t1(test2); t1.detach(); switch (WaitForMultipleEvents(event, 2, true, 8000, arg)) { case 0: std::cout << "Sucess" << std::endl; break; case 1: std::cout << "One event left" << std::endl; break; case 2: std::cout << "Timeout" << std::endl; break; default: std::cout << "Something unexpected" << std::endl; break; } boost::thread t2(test1); t2.detach(); switch (WaitForMultipleEvents(event, 2, true, 8000, arg)) { case 0: std::cout << "Sucess" << std::endl; break; case 1: std::cout << "One event left" << std::endl; break; case 2: std::cout << "Timeout" << std::endl; break; default: std::cout << "Something unexpected" << std::endl; break; } boost::thread t3(test2); boost::thread t4(test1); switch (WaitForMultipleEvents(event, 2, true, 8000, arg)) { case 0: std::cout << "Sucess" << std::endl; break; case 1: std::cout << "One event left" << std::endl; break; case 2: std::cout << "Timeout" << std::endl; break; default: std::cout << "Something unexpected" << std::endl; break; } DestroyEvent(event[0]); DestroyEvent(event[1]); curl_global_init(CURL_GLOBAL_ALL); }