void AudioManager::sltDoWork(int cmd, QString parameter) { switch(cmd) { case ThreadController::AudioThreadCmd_AddAudioFile: // parameter传递的就是具体的音频文件名不含后缀; { switch(ygApp->locale().language()) { case QLocale::English: addFile(g_appPath + QString("/data/wavalbums/") + parameter + QString("_en.wav")); break; case QLocale::Chinese: addFile(g_appPath + QString("/data/wavalbums/") + parameter + QString("_cn.wav")); break; default: break; } break; } case ThreadController::AudioThreadCmd_PrintThreadId: { printThreadId(); break; } default: { break; } } }
void Emu::Stop() { if (thread==nullptr && state == 0) return; EnterCriticalSection(&cs); state = 0; LeaveCriticalSection(&cs); printThreadId(); //std::this_thread::sleep_for(std::chrono::milliseconds(1000)); thread->join(); OutputDebugString("killed thread\n"); SafeDelete(&thread); }
void Emu::thread_func(Emu* emu) { //auto output_ = new audio::output::WASAPI(); //output_->set_window_handle(app::Application::Current()->display_window().handle()); //output_->set_buffer_size(4*44100*2); //output_->Initialize(44100,2,16); //output_->Play(); //WASAPI_Initialize(44100,2,16); //emu->apu_.set_output(output_); memset(&emu->timing,0,sizeof(emu->timing)); emu->utimer.Calibrate(); emu->timing.prev_cycles = emu->utimer.GetCurrentCycles(); emu->set_base_freq_hz(emu->base_freq_hz_); printThreadId(); while (emu->state==1) { emu->Step(); } //output_->Stop(); //output_->Deinitialize(); //SafeDelete(&output_); OutputDebugString("end of thread\n"); }
bool PcapLiveDevice::startCapture(RawPacketVector& capturedPacketsVector) { m_CapturedPackets = &capturedPacketsVector; m_CapturedPackets->clear(); if (m_CaptureThreadStarted || m_PcapDescriptor == NULL) { LOG_ERROR("Device '%s' already capturing or not opened", m_Name); return false; } m_CaptureCallbackMode = false; int err = pthread_create(&(m_CaptureThread->pthread), NULL, getCaptureThreadStart(), (void*)this); if (err != 0) { LOG_ERROR("Cannot create LiveCapture thread for device '%s': [%s]", m_Name, strerror(err)); return false; } m_CaptureThreadStarted = true; LOG_DEBUG("Successfully created capture thread for device '%s'. Thread id: %s", m_Name, printThreadId(m_CaptureThread).c_str()); return true; }
bool PcapLiveDevice::startCapture(OnPacketArrivesCallback onPacketArrives, void* onPacketArrivesUserCookie, int intervalInSecondsToUpdateStats, OnStatsUpdateCallback onStatsUpdate, void* onStatsUpdateUserCookie) { m_IntervalToUpdateStats = intervalInSecondsToUpdateStats; if (m_CaptureThreadStarted || m_PcapDescriptor == NULL) { LOG_ERROR("Device '%s' already capturing or not opened", m_Name); return false; } m_CaptureCallbackMode = true; m_cbOnPacketArrives = onPacketArrives; m_cbOnPacketArrivesUserCookie = onPacketArrivesUserCookie; int err = pthread_create(&(m_CaptureThread->pthread), NULL, getCaptureThreadStart(), (void*)this); if (err != 0) { LOG_ERROR("Cannot create LiveCapture thread for device '%s': [%s]", m_Name, strerror(err)); return false; } m_CaptureThreadStarted = true; LOG_DEBUG("Successfully created capture thread for device '%s'. Thread id: %s", m_Name, printThreadId(m_CaptureThread).c_str()); if (onStatsUpdate != NULL && intervalInSecondsToUpdateStats > 0) { m_cbOnStatsUpdate = onStatsUpdate; m_cbOnStatsUpdateUserCookie = onStatsUpdateUserCookie; int err = pthread_create(&(m_StatsThread->pthread), NULL, &statsThreadMain, (void*)this); if (err != 0) { LOG_ERROR("Cannot create LiveCapture Statistics thread for device '%s': [%s]", m_Name, strerror(err)); return false; } m_StatsThreadStarted = true; LOG_DEBUG("Successfully created stats thread for device '%s'. Thread id: %s", m_Name, printThreadId(m_StatsThread).c_str()); } return true; }