0
我試圖從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;
}
我在想,如果這是可能的線程,其中主要的功能可以繼續,並呼籲其他功能和線程睡眠x
秒並呼籲工人的我fork()
代碼的例子嗎?
預期輸出:
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;
}
我不理解你的意思。您是否曾嘗試將該程序翻譯爲單一進程,多線程方法? –
是的,我可以發佈該代碼 –
是的,你寫了一個函數,while(1){worker();睡眠(5); }'並在創建線程時指定它作爲參數。 std :: thread'文件的哪一部分有問題? –