Я пытаюсь воспроизвести песню в фоновом потоке моего приложения графического интерфейса, чтобы песня не блокировала поток графического интерфейса. Есть ли простой способ сделать это с помощью std :: thread или SFML Threads?Есть ли простой способ воспроизведения звука в фоновом потоке с использованием SFML
Я попытался использовать std :: thread для этого, но он по-прежнему блокирует поток графического интерфейса, когда я вызываю my_thread.join()
.
Вот пример того, что я хочу сделать:
#include <thread>
#include <SFML/Audio.hpp>
#include <unistd.h>
#include <iostream>
void func() {
sf::Music music;
music.openFromFile("mysong.wav");
music.play();
// if I don't have usleep here the function exits immediately
// why is that exactly???
usleep(100000000);
}
int main() {
std::thread my_thread(func);
my_thread.join();
// this is where I would process events/build windows in GUI
while(1)
std::cout << "here"; // <--- Want this to run while song plays
}
Вам не нужно использовать потоки, вы просто вызываете sf :: Sound :: play() для sf :: Sound instance –
Ваш лучший выбор основан на том, что вы написали здесь, чтобы сохранить sf :: Music где-то (обычно класс или аудио-менеджер) и воспроизводить музыку, чтобы она не останавливала вторую, после чего заканчивается ваша функция. – Eddge
Вы можете наслаждаться моим классом Jukebox: https://github.com/SFML/SFML/wiki/Source%3A-Jukebox –