Отключить Goroutine в независимый процесс - PullRequest
0 голосов
/ 28 мая 2019

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

Я нашел метод длявыполнить звук в независимом процессе, превратив его в исполняемый файл с именем playsound и выполнив go install.Затем в моей основной программе я называю это в конце main():

func startPlaySound() {
    cmd := exec.Command("playsound")
    cmd.Start()
}

main() {
   // code that prints and exits

   startPlaySound()
}

Это работает, но я хотел бы иметь возможность воспроизводить звук после выхода из основной программы без создания исполняемого файла.Я бы предпочел запустить эквивалент cmd.Start() для функции, содержащей код для воспроизведения звука.

Другими словами, я бы хотел, чтобы это выглядело примерно так:

func playSound() {
    // code that plays the sound
}

func startPlaySound() {
   cmd := CmdFromFunction(playSound)
   cmd.Start()
}

main() {
   // code that prints and exits

   startPlaySound()
}

Существует ли что-то вроде CmdFromFunction?

Ответ на вопрос Обратная связь

  • Это не дубликат Как мне форкать процесс go? .Я не пытаюсь раскошелиться на main.Я пытаюсь отделить playSound в отдельный процесс, который продолжит выполняться после выхода из программы main.Оба ответа на этот вопрос связаны с выполнением внешней программы, чего я и стараюсь избегать.
  • "подпрограммы go не предназначены для процессов" - я буквально превратил код из playSound висполняемый файл с именем playsound, и теперь я выполняю его как процесс, используя cmd.Start().Я просто пытаюсь найти более прямой путь для этого, чем создание совершенно отдельного исполняемого файла.

1 Ответ

0 голосов
/ 29 мая 2019

Подпрограммы GO не предназначены для процессов

Это может работать.Я сделал это сам, но вы можете быть ограничены оболочкой bash.

cmd := exec.Command("bash", "-c", "playsound", "&")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...