2017-09-17 10 views
-2
#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.別のスレッドの完了後に3つのスレッドを実行したい。 2. pkillを使用して、その間で終了します。

pthread_joinを使用すると、スレッドを次々と実行できますが、私は強制終了できません。

私がpthread_joinを使用していない場合、スレッドは同時に実行され、それらを強制終了できます。プロセスをブロックしていると思います。

私の要件を満たすことができません。スレッドの実行方法を変更するか、スレッドの終了方法を変更する必要があります。

ありがとうございました

ご協力いただければ幸いです。

+0

示されているコードはコンパイルされません。これはいいことではありません。 – alk

+1

また、コードがひどくフォーマットされているため、読みにくくなっています。これもうまくいきません。 – alk

+0

さらに少なくとも 'int main(void)'でなければなりません。 – alk

答えて

0

別のスレッドの完了後に3つのスレッドを実行したいです。

スレッドはまったく必要ありません。その要件は、マルチスレッドの目的に反します。

私はpthread_joinを使用していない場合、スレッドは同時に実行され、それらを強制終了できます。プロセスをブロックしていると思います。

はい、メインスレッドはpthread_join()でブロックされているため(の完了を待つpthread_create()使用して作成された)、それはあなたのpkillコマンドを実行する機会を得ることはありません。 system()は、コマンドが完了するまでブロックします。このコマンドは、pthread_join()で待機しているメインスレッドをブロックします。

基本的に2つの要件は互いに矛盾します。あなたがすることができる最も近いものは&にバックグラウンドで「コマンド」を実行することです:

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

system()すぐに戻り、メインスレッドが継続してpkillコマンドを実行することができるようにします。しかし、このアプローチは、あなたの要件を満たすだろう、それは実際のプログラミングでは多くの意味がありません。

+0

ありがとうございました。私はあなたが言ったように試みたが、すべてのスレッドが同時に実行されています。この問題を解決する他の方法はありますか? – ams

+0

スレッドは同時に実行されるはずです;-)私はあなたがそのような要件を持っている理由を理解していません。 system()のほかに、コマンドをfork&execします。 'fork()'はマルチスレッドプログラムで扱いにくいかもしれません:http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them – usr

0

killer-while-loopの本体を別のスレッド関数に入れ、f1スレッドを開始する直前に別のスレッドとして起動します。

両方のスレッドが参加してやり直すのを待ちます。

関連する問題