Код: Выделить всё
void Game::Music::PlayMusicThread(std::string name, std::string location, double music_len_in_seconds)
{
if (PlayingMap.count(name) == 0)
PlayingMap[name] = true;
auto start = std::chrono::system_clock::now();
PlaySound(to_wstring(location).c_str(), NULL, SND_FILENAME | SND_ASYNC);
while (PlayingMap[name])
{
if (std::chrono::duration_cast(std::chrono::system_clock::now() - start).count() > music_len_in_seconds)
{
PlayMusic(name, location, music_len_in_seconds);
return;
}
}
PlayingMap.erase(name);
PlaySound(NULL, NULL, SND_FILENAME);
}
void Game::Music::PlayMusic(std::string name, std::string location, double music_len_in_seconds)
{
std::thread MusicStartThread(&Game::Music::PlayMusicThread, name, location, music_len_in_seconds);
ThreadMap[name] = &MusicStartThread;
}
Я нашел в Интернете несколько решений этой проблемы. , но ничего не работает. Например:
[*]Добавление std::ref() ко всем параметрам;
[*]Добавление константного типа& к входным параметрам функции;
[*]Удаление Game::Music:: в вызове std::thread.
< /ol>
Я слышал, что std::invoke не поддерживает указатели на функции, но я уверен, что мне это уже удавалось.
Подробнее здесь: https://stackoverflow.com/questions/787 ... tion-found