Unix/Linux创建一个线程
      使用Unix/Linux的系统接口pthread_create()函数创建一个新的线程,主线程和新线程一直输出消息。注意用g++编译的时候要加 -lpthread,即需要链接线程库。源代码如下:
#include <iostream>
#include <pthread.h>
#include <string.h>
#include <stdio.h>
using namespace std;

pthread_t ntid;

void printIds(const char * str)
{
	pid_t pid;
	pthread_t tid;
	pid = getpid();
	tid = pthread_self();
	printf("%s pid %u tid %u (0x%x)\n", str, (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
}

void * thread_fun(void * arg) 
{
	printIds("new thread: ");
	while (true) 
	{
		sleep(2);
		cout << "new thread runing." << endl;
	}
	return (void *)0;
}

int main()
{
	int err;
	err = pthread_create(&ntid, NULL, thread_fun, NULL);
	if (err != 0) 
	{
		printf("%s\n", strerror(err));
	}
	printIds("main thread: ");
	while (true)
	{
		sleep(2);
		cout << "main thread runing." << endl;
	}
	return 0;
}


附上makefile文件的内容

MAIN_TARGET=../ThreadCreate

SRC_PATH=../src
OBJ_PATH=../obj

FILE_1=main.cpp
SRC_1=$(SRC_PATH)/$(FILE_1)
OBJ_1=$(OBJ_PATH)/$(FILE_1:.cpp=.o)

CXX=g++
CXXFLAG=-g -D_DEBUG

THREAD_LIB=pthread

LIBS_PATH=-l$(THREAD_LIB)

INCLUDE_PATH=-I$(SRC_PATH)

COMPILE_CPP=$(CXX) $(CXXFLAG) $(INCLUDE_PATH) -o $@ -c $?
COMPILE_LINK=$(CXX) $(CXXFLAG) $(INCLUDE_PATH) $(LIBS_PATH) -o $@ 

OBJS=$(OBJ_1)

$(MAIN_TARGET)::$(OBJS)
	$(COMPILE_LINK) $(OBJS)

$(OBJ_1)::$(SRC_1)
	$(COMPILE_CPP)

PHONY:clean

clean:
	rm $(OBJS)





Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐