Проблемы с потоками.
От: MusicWriter  
Дата: 10.10.05 13:37
Оценка:
Есть функция


UINT Play(LPVOID pParam)
{
    PlaySound(MAKEINTRESOURCE(IDR_WAVE), AfxGetInstanceHandle(), SND_RESOURCE);
    return 0;
}


Обновляю изображение в цикле


for (int i = 0; i < 5000; i++)
{
// Вывожу изображение.
//Затем запускаю отдельным потоком проигрывание музыки. Правильно ли я делаю???
CWinThread* pPlaySoundThread = AfxBeginThread(PlayAlertSoundThread,
    AfxGetMainWnd()->GetSafeHwnd(), THREAD_PRIORITY_NORMAL);

}


Как это сделать правильно?

При такой реализации комп сильно тормозит. Видимо создаётся много потоков и всё не успевают обрабатываться. Может их как-то грохать надо а?

Как правильно?
Re: Проблемы с потоками.
От: HiSH Россия http://m0riarty.ya.ru
Дата: 10.10.05 14:05
Оценка:
Здравствуйте, MusicWriter, Вы писали:

MW>Обновляю изображение в цикле


MW>

MW>for (int i = 0; i < 5000; i++)
MW>{
MW>// Вывожу изображение.
MW>//Затем запускаю отдельным потоком проигрывание музыки. Правильно ли я делаю???
MW>CWinThread* pPlaySoundThread = AfxBeginThread(PlayAlertSoundThread,
MW>    AfxGetMainWnd()->GetSafeHwnd(), THREAD_PRIORITY_NORMAL);

MW>}

MW>


MW>Как это сделать правильно?


MW>При такой реализации комп сильно тормозит. Видимо создаётся много потоков и всё не успевают обрабатываться. Может их как-то грохать надо а?


Видимо, так и есть — 5000 потоков — не шутка . Я бы:
  1. Сделал поток, который отвечает за проигрывание музыки отдельно. Когда нужно ее проиграть, посылал бы ему сообщение (SendMessage/PostMessage/объекты ядра)
  2. Если все-таки тебе охота в отдельных потоках играть звуки, использовал бы потоковый кэш — может помочь
  3. Хм... А как вообще должно выглядеть то, что ты хочешь сделать? Если изображения выводятся очень быстро, то будет 5000 обновременно играющих звуков — это ли нужно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.