Ответ 1
Нет, стандарт С++ (особенно С++ 11) не имеет понятия о процессе (поэтому я не могу дать вам более разумную ссылку здесь как результат поиска с самого популярного и в настоящее время самого современного сайта документации на С++).
Я также не знаю, что поддержка процесса запланирована для следующей стандартной версии С++ - 17 (aka С++ - 1z). По крайней мере, Wikipedia Site не упоминает об этом.
Существует популярная реализация, которая была предложена для повышения, но никогда не была использована для стандартного предложения С++.
Обычно вы не можете писать переносимый код для работы на голых металлических системах, где существует только один процесс.
Однако существует ли способ выполнить функцию
bar()
в отдельном процессе?
Самый простой способ сделать это - вернуться к fork()
и wait()
, как указано в POSIX Open Group:
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
void bar()
{
std::cout << "bar()\n";
}
int main(int argc, char **argv)
{
pid_t pid = fork();
if (pid == 0)
{
// child process
bar();
}
else if (pid > 0)
{
// parent process
wait(NULL);
}
else
{
// fork failed
std::cerr << "fork() failed!" << std::endl;
return 1;
}
return 0;
}
Хотя я не вижу большого смысла создать дополнительный процесс для выполнения простой функции. Создание процесса создает много накладных расходов, которые вам не нужны в этом случае.
Ну, если вы хотите запустить другую программу, используя функции из семейства функций exec()
, которые используют другой вариант использования.
Я бы рекомендовал придерживаться std::thread
для вашего примера.