gpt4 book ai didi

c++ - 从 fork() 移动到线程

转载 作者:行者123 更新时间:2023-11-28 05:34:36 24 4
gpt4 key购买 nike

我试图在我的应用程序中从 fork() 模型转移到线程。以下是我的 fork() 代码

的示例
#include <iostream>
#include <stdio.h>
#include <unistd.h>

void worker()
{
std::cout<<"\nworker thread\n";
}

int start()
{
pid_t pid;
if((pid = fork()) < 0) {
perror("fork");
return -1;
}

if(pid != 0) {
while(1) {
worker();

sleep(5);
}
}

}


int main()
{
std::cout << "\nstarting...\n" << std::endl;
start();
std::cout << "\nend...\n" << std::endl;
return 0;
}

我想知道这是否可以通过线程实现,其中 main 函数可以继续并调用其他函数,线程休眠 x 秒并调用 worker ?

预期输出:

starting...


thread

end...


thread

并继续。

这是我到目前为止编写的线程代码,我遇到的问题是除非我加入线程,否则控制永远不会返回到主线程,这意味着线程不再运行。但我希望 start() 线程在后台继续运行

#include <iostream>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* worker(void *data)
{
std::cout<<"\nthread\n";
pthread_exit(NULL);
}

int start()
{

pthread_t thread;

while(1){

if(pthread_create(&thread, NULL,worker,NULL)){
printf("\nError creating thread\n");
return -1;
}
sleep(10);


}
pthread_exit(NULL);

}


int main()
{
std::cout << "\nstarting...\n" << std::endl;
start();
std::cout << "\nending...\n" << std::endl;
return 0;

}

最佳答案

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

void worker()
{
std::cout << "Hello.\n";
}


int main()
{
std::thread t{worker}; // spawn a thread to call worker
std::cout << "Boo.\n";
std::this_thread::sleep_for(std::chrono::seconds{1});
t.join(); // wait for t to exit.
return 0;
}

关于c++ - 从 fork() 移动到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38598453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com