Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > вывод звука затормаживает вывод текста


Автор: Gunslinger 5.3.2009, 09:23
Привет!
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Edit1->Text="dgdgdf";
    PlaySound("C:\\15.wav", NULL,SND_FILENAME);
    PlaySound("C:\\16.wav", NULL,SND_FILENAME);
    PlaySound("C:\\17.wav", NULL,SND_FILENAME);

}

секунд на 5-6. Без PlaySound - выводит сразу. Как быть?

Автор: ksili 5.3.2009, 09:42
и в дебаге и в релизе одинаково?

Автор: Dmi3ev 5.3.2009, 10:22
вот так надо:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Edit1->Text="dgdgdf";
    Form1->Refresh();
    PlaySound("C:\\15.wav", NULL,SND_FILENAME);
    PlaySound("C:\\16.wav", NULL,SND_FILENAME);
    PlaySound("C:\\17.wav", NULL,SND_FILENAME);
}

Автор: Gunslinger 5.3.2009, 12:43
Цитата(ksili @  5.3.2009,  09:42 Найти цитируемый пост)
и в дебаге и в релизе одинаково?

одинаково.


Цитата(Dmi3ev @  5.3.2009,  10:22 Найти цитируемый пост)
Код
Form1->Refresh();

работает, спасибо.

Автор: Dmi3ev 5.3.2009, 12:47
Цитата

работает, спасибо. 

пожалуйста!

Автор: Gunslinger 5.3.2009, 12:49
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{

             PlaySound("C:\\15.wav", NULL,SND_FILENAME);
             PlaySound("C:\\16.wav", NULL,SND_FILENAME);
             PlaySound("C:\\17.wav", NULL,SND_FILENAME);
             //Sleep(2000);
         };
};


Автор: Dmi3ev 5.3.2009, 12:52
та же шняга, ты не понял чтоль, в чем прикол?

Добавлено через 45 секунд
но решение будет другое

Автор: xvr 5.3.2009, 12:54
Добавь SND_ASYNC к SND_FILENAME. Вот только подряд несколько PlaySound'ов тогда не пройдут  smile 
Второй вариант - запусти TThread и выполняй PlaySound в нем

Автор: xvr 5.3.2009, 12:55
Кстати, он у тебя не только вывод текста затормозит, но и вообще весь GUI остановит, пока PlaySound не доиграет. Используй асинхронную версию или отдельный TThread

Автор: Gunslinger 5.3.2009, 13:00
Цитата(Dmi3ev @  5.3.2009,  12:52 Найти цитируемый пост)
та же шняга, ты не понял чтоль, в чем прикол?

неа. только мысль про потоки сидела.

Цитата(xvr @  5.3.2009,  12:54 Найти цитируемый пост)
Второй вариант - запусти TThread и выполняй PlaySound в нем

чуть тебя обогнал с вопросом smile Сейчас буду хелп смотреть, как с ним работать.

Автор: xvr 5.3.2009, 13:19
Цитата(Gunslinger @ 5.3.2009,  13:00)
Цитата(xvr @  5.3.2009,  12:54 Найти цитируемый пост)
Второй вариант - запусти TThread и выполняй PlaySound в нем

чуть тебя обогнал с вопросом smile Сейчас буду хелп смотреть, как с ним работать.

Попробуй сначала SND_ASYNC - возможно поток и не понадобится  smile 

Автор: Gunslinger 5.3.2009, 14:05
Цитата(xvr @  5.3.2009,  13:19 Найти цитируемый пост)
Попробуй сначала SND_ASYNC - возможно поток и не понадобится

при
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
             PlaySound("C:\\15.wav", NULL,SND_FILENAME|SND_ASYNC);
             PlaySound("C:\\16.wav", NULL,SND_FILENAME|SND_ASYNC);
             PlaySound("C:\\17.wav", NULL,SND_FILENAME|SND_ASYNC);
             //Sleep(2000);
         };
};

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)