如何在完成另一个线程后执行一个线程?

时间:2017-09-17 10:51:56

标签: c linux process pthreads kill

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void *f1(void *p)
{
system("./while.exe");
}

main()
{
int i=0;
int k=3;
int j=0;
void *status
while(i<k)
{

    thread_id = pthread_create(&thread_handler, NULL, &f1,NULL);
 pthread_join(thread_pram_play_handler, &status);
//if(((int *)status)==0)
            i++;
}//while

while(1)
{
printf("\nEnte value ");
scanf("%d",&j);
if(j==1)
{
system("pkill while.exe");
}
} 
}

While.c包含:

#include<stdio.h>
main()
{
int i=0;
for(i=0;i<25;i++)
{
printf("\nHI");
}
}

在这里,我只是编写一个类似于我的实际代码的代码。 我的要求 1.我希望在另一个完成后执行三个线程。 我想在使用pkill之间终止它。

使用pthread_join我可以一个接一个地执行线程,但我无法杀死。

如果我没有使用pthread_join,那么线程会同时执行并且能够杀死它们。我认为它阻止了进程。

我无法满足我的要求。所以要么我必须改变线程执行方式,要么必须改变终止线程的方式。

谢谢

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

  

我想在另一个完成后执行一个三个线程。

然后你根本不需要线程。该要求违背了多线程的目的。

  

如果我没有使用pthread_join,那么线程会同时执行并且能够杀死它们。我认为它阻止了进程。

是的,因为主线程在pthread_join()被阻止(等待使用pthread_create()创建完成),所以它没有机会执行pkill命令。 system()阻止直到命令完成,这反过来阻塞了在pthread_join()等待的主线程。

基本上你的两个要求相互矛盾。您可以做的最接近的事情是使用&在后​​台运行“命令”:

system("./while.exe &");

以便system()立即返回,主线程可以继续并能够运行pkill命令。但是这种方法可以满足您的要求,在实际编程中没有多大意义。

答案 1 :(得分:0)

将killer-while-loop的主体放入另一个线程函数中,并在启动f1 - 线程之前将其作为单独的线程启动。

等待两个线程加入并重新开始。