十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1、添加線程相關(guān)的頭文件:#includepthread.h

為班瑪?shù)鹊貐^(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及班瑪網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、班瑪網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
2、線程創(chuàng)建函數(shù)是pthread_create()函數(shù),該函數(shù)的原型為:
int?pthread_create(pthread_t?*thread,pthread_attr_t?*attr,void*?(*start_routine)(void*),void?*arg);
3、線程退出函數(shù)是pthread_exit()函數(shù),該函數(shù)的原型為:
void?pthread_exit(void?*retval);
創(chuàng)建線程的示例程序如下:
/*
**程序說明:創(chuàng)建線程函數(shù)pthread_create()函數(shù)的使用。
*/
#include?stdio.h
#include?pthread.h
#include?unistd.h
#include?stdlib.h
#include?string.h
//打印標(biāo)識(shí)符的函數(shù)
void?print_ids(const?char?*str)
{
pid_t?pid; //進(jìn)程標(biāo)識(shí)符
pthread_t?tid; //線程標(biāo)識(shí)符
pid=getpid(); //獲得進(jìn)程號(hào)
tid=pthread_self(); //獲得線程號(hào)
printf("%s?pid:%u?tid:%u?(0x%x)\n",
str,(unsigned?int)pid,(unsigned?int)tid,(unsigned?int)tid);?//打印進(jìn)程號(hào)和線程號(hào)
}
//線程函數(shù)
void*?pthread_func(void?*arg)
{
print_ids("new?thread:"); //打印新建線程號(hào)
return?((void*)0);
}
//主函數(shù)
int?main()
{
int?err;
pthread_t?ntid; //線程號(hào)
err=pthread_create(ntid,NULL,pthread_func,NULL); //創(chuàng)建一個(gè)線程
if(err?!=?0)
{
printf("create?thread?failed:%s\n",strerror(err));
exit(-1);
}
print_ids("main?thread:"); //打印主線程號(hào)
sleep(2);
return?0;
}
·線程創(chuàng)建
函數(shù)原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立線程返回0,否則返回錯(cuò)誤的編號(hào)。
形式參數(shù):pthread_t *restrict tidp要?jiǎng)?chuàng)建的線程的線程id指針;
const pthread_attr_t *restrict attr創(chuàng)建線程時(shí)的線程屬性;
void* (start_rtn)(void)返回值是void類型的指針函數(shù);
void *restrict arg start_rtn的形參。 =====這個(gè)地方就可以傳參數(shù),
注意,這個(gè)地方是個(gè)指針,要想傳多個(gè)參數(shù),可以定義一個(gè)結(jié)構(gòu)體,把要傳的參數(shù)包起來,傳結(jié)構(gòu)體的地址就ok
通常使用CreateThread函數(shù)來創(chuàng)建新的線程.(Unix下使用pthread_create函數(shù))
首先指出,線程與線程之間,是并列關(guān)系,不會(huì)存在"父子線程"的概念.
在Windows平臺(tái)下,CreateThread函數(shù)包含在 Windows.h 文件內(nèi),包含此文件即可正常使用.
以下為CreateThread函數(shù)的聲明:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性屬性描述結(jié)構(gòu)體的
//指針,通常可以忽略的.
SIZE_T dwStackSize,//指定新線程初始的棧大小,若不關(guān)心,可以用0填充,來要求使用
//默認(rèn)值
LPTHREAD_START_ROUTINE lpStartAddress,//用來充當(dāng)線程的函數(shù)的指針.
LPVOID lpParameter,//要傳遞給函數(shù)的參數(shù),這個(gè)值本身就是那個(gè)參數(shù),而不是參數(shù)的地址
DWORD dwCreationFlags,//創(chuàng)建的方式,0表示正常,創(chuàng)建后立即開始運(yùn)行
LPDWORD lpThreadId//用來接受函數(shù)反饋的線程ID的指針.
);
用來充當(dāng)新的線程的函數(shù)格式:
DWORD WINAPI ThreadProc(LPVOID);
CreateThread函數(shù)若成功了,返回新線程的句柄,若失敗了,則返回NULL.
若用CREATE_SUSPENDED填充dwCreation Flags則創(chuàng)建的線程先掛起來,并不直接開始運(yùn)行,要用ResumeThread函數(shù)恢復(fù)線程,才能繼續(xù)運(yùn)行.