#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,那么线程会同时执行并且能够杀死它们。我认为它阻止了进程。
我无法满足我的要求。所以要么我必须改变线程执行方式,要么必须改变终止线程的方式。
谢谢
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
我想在另一个完成后执行一个三个线程。
然后你根本不需要线程。该要求违背了多线程的目的。
如果我没有使用pthread_join,那么线程会同时执行并且能够杀死它们。我认为它阻止了进程。
是的,因为主线程在pthread_join()
被阻止(等待使用pthread_create()
创建完成),所以它没有机会执行pkill
命令。 system()
阻止直到命令完成,这反过来阻塞了在pthread_join()
等待的主线程。
基本上你的两个要求相互矛盾。您可以做的最接近的事情是使用&
在后台运行“命令”:
system("./while.exe &");
以便system()
立即返回,主线程可以继续并能够运行pkill
命令。但是这种方法可以满足您的要求,在实际编程中没有多大意义。
答案 1 :(得分:0)
将killer-while-loop的主体放入另一个线程函数中,并在启动f1
- 线程之前将其作为单独的线程启动。
等待两个线程加入并重新开始。