in src/cubeb_wasapi.cpp [512:546]
void notification_thread_loop()
{
struct auto_com {
auto_com()
{
HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
XASSERT(SUCCEEDED(hr));
}
~auto_com() { CoUninitialize(); }
} com;
HANDLE wait_array[3] = {
input_changed,
output_changed,
begin_shutdown,
};
while (true) {
Sleep(200);
DWORD wait_result = WaitForMultipleObjects(ARRAY_LENGTH(wait_array),
wait_array, FALSE, INFINITE);
if (wait_result == WAIT_OBJECT_0) { // input changed
cubeb_context->input_collection_changed_callback(
cubeb_context, cubeb_context->input_collection_changed_user_ptr);
} else if (wait_result == WAIT_OBJECT_0 + 1) { // output changed
cubeb_context->output_collection_changed_callback(
cubeb_context, cubeb_context->output_collection_changed_user_ptr);
} else if (wait_result == WAIT_OBJECT_0 + 2) { // shutdown
break;
} else {
LOG("Unexpected result %lu", wait_result);
}
} // loop
}