很多人写多线程开发的时候都是写在单个文件内,完全不适合作为一个工程的方法来进行开发。以下的程序示例是拆分成多个文件的做法,并写一个makefile管理。
文件清单:
/*main.c*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread1.h>
#include <pthread2.h>
#include <pthread.h>
int main(int argc, char **argv)
{
pthread_t id1, id2;
printf("This is main...\n");
if (pthread_create(&id1, NULL, (void*)pthread1, NULL))
{
printf("pthread_create pthread1 failed!\n");
exit(1);
}
if (pthread_create(&id2, NULL, (void*)pthread2, NULL))
{
printf("pthread_create pthread2 failed!\n");
exit(1);
}
pthread_join(id1, NULL);
pthread_join(id2,NULL);
return 0;
}
/*pthread1.c*/
#include <pthread1.h>
void pthread1(void)
{
while(1)
{
printf("This is pthread1...\n");
usleep(10);
}
pthread_exit(0);
}
/*pthread2.c*/
#include <pthread2.h>
void pthread2(void)
{
while(1)
{
printf("This is pthread2...\n");
usleep(10);
}
pthread_exit(0);
}
/*pthread1.h*/
#ifndef _PTHREAD1_H
#define _PTHREAD1_H
#include <stdio.h>
void pthread1(void);
#endif
/*pthread2.h*/
#ifndef _PTHREAD2_H
#define _PTHREAD2_H
#include <stdio.h>
void pthread2(void);
#endif
#makefile
CFLAGS = -Wall -g -I../include
LIBS = -lpthread
CC = gcc
OBJECT_DIR = ../object/
TARGET = thread
OBJECT = $(OBJECT_DIR)main.o $(OBJECT_DIR)pthread1.o $(OBJECT_DIR)pthread2.o
DE_OBJECT = main.o pthread1.o pthread2.o
$(TARGET):$(DE_OBJECT)
$(CC) $(CFLAGS) $(LIBS) -o $(OBJECT_DIR)$@ $(OBJECT)
%.o:%.c
$(CC) -c $(CFLAGS) $(LIBS) $< -o $(OBJECT_DIR)$@
.PHONY:clean
clean:
rm -f $(OBJECT_DIR)*.o $(OBJECT_DIR)$(TARGET)
在当前目录下新建一个目录include和object(用于存放目标文件),注意把头文件pthread1.h和pthread2.h放进去,然后在进行make,成功后会在object下生成可执行文件thread,执行就OK了。