void CSound::StartThread(int maxSounds) { #if BOOST_VERSION >= 103500 try { #endif { boost::mutex::scoped_lock lck(soundMutex); // Generate sound sources for (int i = 0; i < maxSounds; i++) { SoundSource* thenewone = new SoundSource(); if (thenewone->IsValid()) { sources.push_back(thenewone); } else { maxSounds = std::max(i-1,0); LogObject(LOG_SOUND) << "Your hardware/driver can not handle more than " << maxSounds << " soundsources"; delete thenewone; break; } } // Set distance model (sound attenuation) alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); //alDopplerFactor(1.0); alListenerf(AL_GAIN, masterVolume); } configHandler->Set("MaxSounds", maxSounds); soundThreadRunning = true; while (soundThreadRunning) { #if BOOST_VERSION >= 103500 boost::this_thread::sleep(boost::posix_time::millisec(50)); // sleep #else SDL_Delay(50); #endif boost::mutex::scoped_lock lck(soundMutex); // lock Update(); // call update } #if BOOST_VERSION >= 103500 } catch(boost::thread_interrupted const&) { // do cleanup here } #endif }
void CSound::StartThread(int maxSounds) { { boost::mutex::scoped_lock lck(soundMutex); // Generate sound sources for (int i = 0; i < maxSounds; i++) { SoundSource* thenewone = new SoundSource(); if (thenewone->IsValid()) { sources.push_back(thenewone); } else { maxSounds = i-1; LogObject(LOG_SOUND) << "Your hardware/driver can not handle more than " << maxSounds << " soundsources"; delete thenewone; break; } } // Set distance model (sound attenuation) alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); //alDopplerFactor(1.0); alListenerf(AL_GAIN, masterVolume); } while (true) { boost::this_thread::sleep(boost::posix_time::millisec(50)); boost::this_thread::interruption_point(); boost::mutex::scoped_lock lck(soundMutex); Update(); } }