2. pthread 생성

System Program/pthread 2014. 3. 7. 11:52

1. 새로운 쓰레드 생성 의미

 

쓰레드의 관점에서만 보면 main() 함수로 시작하는 프로세스는 주 쓰레드이다.

쓰레드를 새로 생성한다는 것은 주 쓰레드 뿐만 아니라 추가적인 쓰레드를 만드는 것이다.

 

2. pthread_create() 함수 

 

#include <pthread.h>

 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*entry_point)(void *), void *args);

 

성공하면 '0'을 리턴, 에러가 발생하면 에러 번호(양수)를 리턴한다.  

 

 3. 예제

 

아래 예제는 모양만 낸 예제이다. 의도하는 바는 TS File로부터 TS Section을 뜯어온다는 개념에서 출발한 것이다.  

 

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

void *SI_ProcessTSFilter(void *pData)
{
	UINT16 PID = 0x00;
	FILE *fp = NULL;
	UINT32 nRead = 0;
	UINT8 buffer[188] = {0, };
	UINT32 filesize = 0;
	
	fp = fopen("hurrycain.ts", "rb");
	if(!fp)
	{
		printf("fopen error \n");
	}

/*	
	fseek(fp, 0, SEEK_END);
	filesize = ftell(fp);
	fseek(fp, 0, SEEK_SET);
	
	printf("filezie = %d \n", filesize);
*/	
	while(1)
	{
		nRead = fread(buffer, 1, 188, fp);

		if(nRead < 188)
			break;
		
		if(buffer[2] == 0)
			printf("TS Header = %#x %#x %#x\n", buffer[0], buffer[1], buffer[2]);
		//sleep(1);		
	}
	
	fclose(fp);
	
	pthread_exit((void *) 0);
	//return 0;
}

int main(int argc, char *argv[])
{
	pthread_t tid;
	void *res;
	int s;
	
	s = pthread_create(&tid, NULL, SI_ProcessTSFilter, NULL);
	if(s != 0)
	{
		printf("pthread_create error \n");
	}

	s = pthread_join(tid, &res);
	if(s != 0)
	{
		printf("pthread_join error \n");
	}

	printf("thread joined .....%ld\n", (long)res);

	return 0;
}

 

 

 

: