我正在尝试做一个原生的应用程序,我需要一个单独的线程在后台冻结一些值(不断覆盖与延迟),我不需要任何返回从它到Main。所以当我从线程分离时创建线程后,它不会进行冻结。
pthread_create(&frzTh, NULL, freezingNow, NULL);
pthread_detach(frzTh);
但是如果我加入线程,那么它将执行冻结,但是我的主线程在等待子线程完成时会被阻塞,并且由于子线程无限运行,所以不会出现。
pthread_create(&frzTh, NULL, freezingNow, NULL);
pthread_join(frzTh,NULL);
因此,我尝试使用fork()创建子进程而不是线程。现在,我能够执行与我的主要任务平行的所有任务。但是,这会导致大量内存占用,并导致器件发热。
pid_t pid_c = fork();
if (pid_c == 0 && freeze) {
while (freeze) {
Freeze();
usleep(delay);
}
}
那么,做这件事的最好方法是什么呢?
如果您想用Mainthread做一些异步直到结束main,我推荐C++中Promise-Future
这个例子:)祝你好运
#include <future>
#include <iostream>
#include <thread>
void DoWork(promise<int> p)
{
// do something (child thread)
// saved value in p
p.set_value(10);
}
int main(void)
{
promise<int> p;
auto future = p.get_future();
thread worker{ DoWork, std::move(p)};
// do something you want
// return result
int result = future.get();
std::cout<< result <<'\n'; // print 10
}