2010-06-27 5 views
1

Mabye, кто-то здесь, может объяснить мне, что я делаю неправильно ... Это после прочтения большого количества статей по сети и выполнения того, что сказал сказал там ... и не работает. ...Проблема с Threads в проекте MFC

Моя проблема в том, что я разрабатываю симпатичную маленькую игру с фоновой музыкой и звуком взрыва, для взрыва, я знаю, что мне нужно использовать потоки, или моя музыка останавливается, когда происходит первый, я использую потоки но он останавливается ....

Вот мой код .... это очень просто, но я думаю, что есть ошибка там ....

  1. Это GLOBAL-проскальзывание в файле * .h:

    UINT CMonstersThread (LPVOID Param);

  2. Это функция потока в * .cpp файле:

    UINT CMonstersThread (LPVOID Param) { PlaySoundA ("Звуки \ expl06.wav", NULL, SND_ASYNC); AfxEndThread (0); return FALSE; }

  3. Это вызов для потока каждый раз, когда "дружественные" попасть (в том же * .cpp файл):

    AfxBeginThread (CMonstersThread, NULL, THREAD_PRIORITY_NORMAL, 0,0, NULL);

Это все мой код ..... И от того, что я получил через Интернет, это sould работа ... но не делает то, что он sould ....

10x в продвижение,

Эрез

+0

Некоторые вопросы (более полный код поможет): Вы играете где-то по-другому, прежде чем ждать, пока этот звук не будет выполнен? Вы смотрели на звук синхронно, а не асинхронно? Ваш объект нити умирает преждевременно? Трудно сказать, из кода, который вы опубликовали, что происходит. Вы также можете вызвать 'PlaySound (NULL, 0, 0)' для блокировки до тех пор, пока текущий звук не будет завершен. – 2010-06-27 19:43:53

+0

извините, mabye, в чем проблема? что у меня нет всего необходимого кода ?, я действительно не знаю .... Первый раз, используя потоки в MFC, в java так легко сделать такие вещи ..... Для ваших квестов : 1. Мне нужно, чтобы фоновая музыка продолжала играть, она играет все время и может продолжать играть и после взрыва. 2. Я попытался воспроизвести синхронизацию с взрывами, это не имеет никакого значения, фоновый звук перестает воспроизводить второй процесс потока. – Erez

+0

3. Я не возражаю против того, чтобы нить нить или оставить ее в живых .... что даже помогло мне решить проблему. Мне это не нужно. Пока не произойдет следующий удар, поэтому я не вижу никаких изменений, чтобы сохранить его, но я не против. Надеюсь, что поможет вам помочь мне еще ... 10x :-) 4. Из того, что я знаю, PlaySound (NULL, 0, 0) останавливает текущий звук ... нет? как это помогает моей проблеме? Мне нужен фоновый звук, чтобы остаться в живых .... :-) Mabye я не понял ..... :-( – Erez

ответ

0

Я бы предложил использовать XAudio2 от новейшего DirectX sdk для воспроизведения вашего аудио. Я возьму еще немного кода &, но конечный результат будет лучше, потому что вы сможете загрузить звуковой файл отдельно от его воспроизведения.

С помощью функции «PlaySound» вы заметите задержку в звуке, если попытаетесь использовать ее сразу после события, например, щелчок мышью или смерть/взрыв монстра, и вы не ударите его с помощью XAudio2. Я знаю это по опыту.

Поскольку вы уже используете Visual Studio, я также предлагаю вам попробовать использовать VS 2010, если это возможно, потому что [Concurrency Runtime, библиотека параллельных шаблонов и библиотека агентов]] 1 сделать многопоточность и выполнять задачи с меньшим количеством кода.

Имеются также образцы по адресу http://code.msdn.com/concrtextras, и вы также можете найти что-то полезное здесь.

-Rick

0

Вы можете посмотреть на использовании более полнофункциональную библиотеки для вашей музыки и проигрывания звука, таких как irrKang. Я не уверен, что winmm.dll доставит вам то, что вам нужно.

0

Единственная проблема, которую я вижу в коде, который вы опубликовали, заключается в том, что CMonstersThread не объявлен как __stdcall.

Вы говорите, что в какой-то другой теме есть проблемы, но, не видя кода, довольно сложно угадать, каковы могут быть его проблемы.

+0

Не должно быть необходимости – 2010-06-28 02:30:52

+0

OK, если функция назначения вызывает AfxEndThread, тогда нет другого компонент будет ждать, пока функция назначения очистит последнюю часть своего стека. Но будьте осторожны, если функция назначения прекращается каким-либо другим способом. –

+0

Я вижу, откуда вы родом, но на основании указанной информации, я думаю, что его проблема - гораздо более простая проблема с проблемой Sound API. – 2010-06-28 13:38:18

0

Я не думаю, что можно играть несколько звуков в параллельном режиме с использованием любой из функций Windows, как PlaySound или sndPlaySound. Как уже было предложено, вы можете посмотреть DirectSound или аналогичные API.