GetExitCodeThread函數(shù)可以得到線程終結(jié)時(shí)的返回值,因?yàn)榫€程終結(jié)了,所以系統(tǒng)中不再有這個(gè)線程,hThreadRcvData本身已經(jīng)無效,所以調(diào)用TerminateThread函數(shù)會(huì)失敗。
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)福清免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
終止線程有三種方法:
1.線程可以在自身內(nèi)部調(diào)用AfxEndThread()來終止自身的運(yùn)行
2.可以在線程的外部調(diào)用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )來強(qiáng)行終止一個(gè)線程的運(yùn)行,
然后調(diào)用CloseHandle()函數(shù)釋放線程所占用的堆棧
3.第三種方法是改變?nèi)肿兞浚咕€程的執(zhí)行函數(shù)返回,則該線程終止。
unsigned long __cdecl _beginthread (void (__cdecl *) (void *),
unsigned, void *); PS--這是我復(fù)制的別人的
給你兩種方法
(1)return法
如果main函數(shù)沒有返回值,則
return;有則返回相應(yīng)類型的值即可
(2)ctr+Z或者ctr+D,前者為微軟操作系統(tǒng),后者是Unix系統(tǒng)中停止程序的運(yùn)行
c語言退出整個(gè)程序或函數(shù)的命令是return、goto 、break 、break。
1、return 返回;
return 表示從被調(diào)用函數(shù)返回主調(diào)函數(shù)繼續(xù)執(zhí)行,返回時(shí)可附帶一個(gè)返回值,由return后面的參數(shù)設(shè)定。
2、goto 無條件跳轉(zhuǎn);
goto語句也稱作無條件轉(zhuǎn)移語句,其一般格式為goto語句標(biāo)號(hào):其中語句標(biāo)號(hào)是按照標(biāo)識(shí)符規(guī)定書寫的符號(hào),放在某一行語句行的前面,標(biāo)號(hào)后加冒號(hào)(:)。
3、break 調(diào)處最近一層塊;
大多數(shù)情況下是終止上一層的循環(huán),C語言中break在switch中執(zhí)行一條case后跳出語句的作用 ?使程序跳出switch執(zhí)行switch以后的語句 如果沒有break switch會(huì)從滿足條件的地方執(zhí)行到switch結(jié)構(gòu)結(jié)束。
擴(kuò)展資料
break語句使用
示例:
#include stdio.h
void main()
{
int x=1;
while(x=4)
{
printf("x=%d\n",x);
if (x==3)
{
break;
}
x++;
}
}
面只有兩個(gè)線程,是生產(chǎn)者/消費(fèi)者模式,已編譯通過,注釋很詳細(xì)。
/* 以生產(chǎn)者和消費(fèi)者模型問題來闡述Linux線程的控制和通信你
生產(chǎn)者線程將生產(chǎn)的產(chǎn)品送入緩沖區(qū),消費(fèi)者線程則從中取出產(chǎn)品。
緩沖區(qū)有N個(gè),是一個(gè)環(huán)形的緩沖池。
*/
#include stdio.h
#include pthread.h
#define BUFFER_SIZE 16
struct prodcons
{
int buffer[BUFFER_SIZE];/*實(shí)際存放數(shù)據(jù)的數(shù)組*/
pthread_mutex_t lock;/*互斥體lock,用于對(duì)緩沖區(qū)的互斥操作*/
int readpos,writepos; /*讀寫指針*/
pthread_cond_t notempty;/*緩沖區(qū)非空的條件變量*/
pthread_cond_t notfull;/*緩沖區(qū)未滿 的條件變量*/
};
/*初始化緩沖區(qū)*/
void pthread_init( struct prodcons *p)
{
pthread_mutex_init(p-lock,NULL);
pthread_cond_init(p-notempty,NULL);
pthread_cond_init(p-notfull,NULL);
p-readpos = 0;
p-writepos = 0;
}
/*將產(chǎn)品放入緩沖區(qū),這里是存入一個(gè)整數(shù)*/
void put(struct prodcons *p,int data)
{
pthread_mutex_lock(p-lock);
/*等待緩沖區(qū)未滿*/
if((p-writepos +1)%BUFFER_SIZE ==p-readpos)
{
pthread_cond_wait(p-notfull,p-lock);
}
p-buffer[p-writepos] =data;
p-writepos++;
if(p-writepos = BUFFER_SIZE)
p-writepos = 0;
pthread_cond_signal(p-notempty);
pthread_mutex_unlock(p-lock);
}
/*從緩沖區(qū)取出整數(shù)*/
int get(struct prodcons *p)
{
int data;
pthread_mutex_lock(p-lock);
/*等待緩沖區(qū)非空*/
if(p-writepos == p-readpos)
{
pthread_cond_wait(p-notempty ,p-lock);//非空就設(shè)置條件變量notempty
}
/*讀書據(jù),移動(dòng)讀指針*/
data = p-buffer[p-readpos];
p-readpos++;
if(p-readpos == BUFFER_SIZE)
p-readpos = 0;
/*設(shè)置緩沖區(qū)未滿的條件變量*/
pthread_cond_signal(p-notfull);
pthread_mutex_unlock(p-lock);
return data;
}
/*測(cè)試:生產(chǎn)站線程將1 到1000的整數(shù)送入緩沖區(qū),消費(fèi)者線程從緩沖區(qū)中獲取整數(shù),兩者都打印信息*/
#define OVER (-1)
struct prodcons buffer;
void *producer(void *data)
{
int n;
for( n=0;n1000;n++)
{
printf("%d ------\n",n);
put(buffer,n);
}
put(buffer,OVER);
return NULL;
}
void *consumer(void *data)
{
int d;
while(1)
{
d = get(buffer);
if(d == OVER)
break;
else
printf("-----%d\n",d);
}
return NULL;
}
int main()
{
pthread_t th_p,th_c;
void *retval;
pthread_init(buffer);
pthread_create(th_p,NULL,producer,0);
pthread_create(th_c,NULL,consumer,0);
/*等待兩個(gè)線程結(jié)束*/
pthread_join(th_p, retval);
pthread_join(th_c,retval);
return 0;
}
1、添加線程相關(guān)的頭文件:#includepthread.h
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;
}
網(wǎng)站題目:c語言線程關(guān)閉函數(shù) c語言關(guān)閉進(jìn)程
標(biāo)題路徑:http://jinyejixie.com/article16/doseogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、軟件開發(fā)、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、小程序開發(fā)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)