2017-04-23 7 views
1

이것이 내 문제입니다. 예를 들어, 내 프로그램에서 항상 작동해야하는 작업 A가 있습니다 (예 : 초당 15 회 호출되는 함수). 작업 A는 많은 양의 데이터를 수집합니다. 그런 다음 사용자가이 큰 데이터를 파일로 내보내는 것을 트리거합니다. 이 작업 B (즉, 파일로 데이터 내보내기)는 백그라운드에서 수행되어야 작업 A가 중지되지 않습니다.C에서 역 접지를 수행하는 가장 좋은 방법

#include <stdio.h> 
#include <pthread.h> 

void *threada() { 
    int i = 0; 
    for(i = 0;i < 1000;i++) { 
     printf("This is new thread!\n"); 
    } 

    pthread_exit(NULL); 
} 

int main() { 
    int i = 0; 
    pthread_t thread; 
    for(i = 0;i < 105;i++) { 
     printf("This is current thread!\n"); 
     if(i == 100) { 
      pthread_create(&thread, NULL, threada, NULL); 
     } 
    } 

    pthread_exit(NULL); 
    return 0; 
} 

을 또는이 작업을 수행하는 또 다른 방법이있다 :

나는 이런 식으로의 pthreads를 사용하여 배경 처리 수행 할 수 있습니다?

+0

백그라운드에서 새 작업을 포크 할 수도 있습니다. – Shiping

+0

포크를 사용할 때주의해야 할 문제가 있습니까? 예를 들어, 상위 프로세스가 종료되면 하위 프로세스가 종료됩니까? – PeMaCN

+0

주 스레드에서'pthread_join (thread, NULL)'을 사용하여 작업 스레드가 완료 될 때까지 기다려야합니다. 반환 호출 전에는'pthread_exit (NULL) '이 아닙니다. 부모 프로세스가 종료되면 – Scab

답변

1

fork() 메소드를 사용하면 실제로이 작업을 수행 할 수 있습니다. 나는 지금 막 당신에게 템플렛을주고있다, 여기에서 계속 전진 할 수있다. 내가 제공 한 의견을 읽으십시오.

#include<unistd.h> 
#include <stdio.h> 
#include <time.h> 
clock_t begin; 
clock_t end; 
int a[1000],i=0; 
void B(int a[],int n) 
{ 
    printf("%d",a[0]); //do your process here. 
} 
void A() 
{ 
    scanf("%d",&a[i]); 
    int p; 
    i++; 
    end=clock(); 
    double time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 
    if(time_spent>=15) 
    { 
     p=fork(); 
     if(p==0) // child process will execute 
     { 
      B(a,i); 
     } 
     else //parent resets the clock 
     { 
      begin=clock(); 
     } 
    } 
    A(); // This reads infinitely better write base condition to stop. 
} 
int main() 
{ 

    A(); 
}