我是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;
}