我想编写一些代码,它会在主线程上启动一些线程,该线程每2秒运行一次,并将在控制台上打印一些内容。
开始功能必须是这样的
void StartTask(void* methodRoRun, long repeatTimeInSeconds);
这意味着该方法接收到指向将每隔repeatTimeInSeconds秒运行一次的函数(methodRoRun)的指针。
我找不到如何用C++做到这一点
最佳答案
像这样:
#include <thread>
#include <functional>
void f() {
printf("Task started\n");
// do stuff
}
void StartTask(std::function<void()> methodRoRun, long repeatTimeInSeconds) {
std::thread th([methodRoRun, repeatTimeInSeconds]() {
while (true ) {
methodRoRun();
std::this_thread::sleep_for(std::chrono::seconds(repeatTimeInSeconds));
}
});
th.detach();
}
int main() {
StartTask([](){ f(); }, 1);
while (true) {}
return 0;
}
编辑:
人们正确地指出了这一点,那就是分离线程并产生无限循环不是一个好习惯,但是该示例仅说明了这种方法。