2015-02-05 3 views
-1

Я ищу решение, как разбить бесконечный цикл, когда поток будет закончен. код довольно сложный, поэтому я показываю u только основную часть. Смотри нижеКак разбить простую для бесконечного цикла в C по потоку

for(;;){  if(stan==false) 
       pthread_create(&counter, NULL, count_me, NULL);  
       //to create thread only once in loop 

       stan=true; 

        move=getchar(); 
        //(...) action.... doesn't matter  
     } 

Как вы видите, главный ждет пользователя переезда в GetChar() FUNC. Я хочу разбить этот цикл, через 10 секунд создать поток.

нить Защита ниже

 void *count_me(void *threadid) 
     { 
      sleep(10); 

      pthread_exit(NULL); 

     } 

ТНХ за помощь

+0

Вы не можете разбить бесконечный цикл. Если он разрушительный, это не бесконечно. Во всяком случае, просто используйте глобальную переменную - 'volatile int endLoop = 0;' и установите ее в 1 из другого потока. Проверяйте его каждый раз в цикле. – sashoalm

+0

Я думаю, вы действительно хотите отменить 'getchar'. Если я правильно понял, этот подход может помочь вам: http://stackoverflow.com/questions/11513593/cancelling-getchar – alediaferia

ответ

0

простым способом, чтобы добавить флаг, который устанавливается в потоке, когда он выходит, основной поток может проверить этот флаг и вызов pthread_join и вырваться из цикла.

0
for(;;) 
    { 
      if(breakloop != 0) 
      { 
      if(stan==false) 
      pthread_create(&counter, NULL, count_me, NULL);  
      //to create thread only once in loop 

      stan=true; 

       move=getchar(); 
       //(...) action.... doesn't matter 
      } 
      else 
      { 
       break; 
      } 
    } 

Это должно сработать. Измените breakloop на 1 или что-то еще, когда вы хотите разбить цикл. В вашем случае создайте таймер, например.

Смежные вопросы