如何在c++中单独的线程上运行方法/函数



我是c++的初学者,所以我知道的不多

这是一个函数

void example(){
for(int i=0; i<5; i++){
// do stuff
}
}

如果我调用这个函数,它将等待它完成后再继续

int main(){
example();
otherThingsGoHere();
otherThingsGoHere();
otherThingsGoHere();
return 0;
}

在example()完成之前,otherThingsGoHere()不会被调用

我的目标是让这个函数能够在一个循环中永远循环60/70 fps

,我确实让它工作了,除了下面什么都不会发生,因为它是一个无限循环。

我做c#开发人员已经有一段时间了,我知道在c#中,你可以使用异步函数在单独的线程上运行。我如何在c++中实现这样的东西?

编辑:我不是要求你把otherThingsGoHere放在main前面,因为其他东西将是另一个循环,所以我需要它们同时运行

您可以使用std::thread并在该新线程中运行example()函数。

std::thread可以在构造一个要运行的函数时启动。它可能与运行otherThingsGoHere的主线程并行运行。我写"潜在的"是因为它取决于你的系统和核心的数量。如果你有一个多核的PC,它实际上可以这样运行。在main()退出之前,它应该通过调用std::thread::join()来等待另一个线程优雅地结束。

最简单的例子是:

#include <thread>
#include <iostream>
#include <chrono>
void example() {
for (int i = 0; i < 5; i++) {
std::cout << "thread...n";
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
void otherThingsGoHere() {
std::cout << "do other things ...n";
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
int main() {
std::thread t{ example };
otherThingsGoHere();
otherThingsGoHere();
otherThingsGoHere();
t.join();
return 0;
}

相关内容

  • 没有找到相关文章

最新更新