日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

arg是什么函数_怎么实现边听歌边搜图?线程初体验:常用函数

發(fā)布時(shí)間:2024/1/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arg是什么函数_怎么实现边听歌边搜图?线程初体验:常用函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖控大叔

構(gòu)圖傳遞思想

閱讀從未如此簡(jiǎn)單!!!

01

前言

? ? ? ?今天我們來(lái)認(rèn)識(shí)一下線(xiàn)程及其常用函數(shù)。當(dāng)你今天看到我在寫(xiě)推文時(shí),你可能會(huì)說(shuō):

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???

02

目錄總覽

2-1 什么是線(xiàn)程2-2?常用函數(shù)速覽
2-3?各函數(shù)參數(shù)說(shuō)明
2-4?例程分享

2-1

什么是線(xiàn)程

1,稱(chēng)之為調(diào)度的最小單位,CPU的任務(wù)調(diào)度都是以線(xiàn)程為單位去調(diào)度的
2,所有的進(jìn)程里面都有至少一條線(xiàn)程
3,如果是同個(gè)進(jìn)程的線(xiàn)程,共享所有資源
4,任務(wù)隊(duì)列的依賴(lài)原型
5,每個(gè)線(xiàn)程獨(dú)立擁有一片棧空間,默認(rèn)大小為2-8M也就是說(shuō),
1、線(xiàn)程創(chuàng)建后會(huì)很認(rèn)真的去一件事
2、多個(gè)線(xiàn)程同時(shí)運(yùn)行其實(shí)是切割系統(tǒng)時(shí)間片
?宏觀并行,微觀串行
3、這就是標(biāo)題提到的:邊聽(tīng)歌邊搜圖的實(shí)現(xiàn)基礎(chǔ)

2-2

常用函數(shù)速覽

int?pthread_create(pthread_t *thread, const?pthread_attr_t *attr,void?*(*start_routine) (void?*), void?*arg);
????線(xiàn)程創(chuàng)建int?pthread_cancel(pthread_t thread);
????發(fā)指令請(qǐng)求結(jié)束指定線(xiàn)程
????(包含取消點(diǎn)函數(shù)知識(shí)點(diǎn))void?pthread_exit(void?*retval);
????線(xiàn)程結(jié)束自身int?pthread_join(pthread_t thread, void?**retval);
????指定線(xiàn)程ID,回收線(xiàn)程資源pthread_t pthread_self(void);
????線(xiàn)程獲取自身線(xiàn)程IDvoid?pthread_cleanup_push(void?(*routine)(void?*),void?*arg);
??????注冊(cè)函數(shù)功能:線(xiàn)程收到取消指令后,
??????會(huì)先執(zhí)行已經(jīng)注冊(cè)的函數(shù),再退出線(xiàn)程void?pthread_cleanup_pop(int?execute);
??????清除注冊(cè)過(guò)的函數(shù),線(xiàn)程收到取消指令后,直接退出

2-3

各函數(shù)參數(shù)說(shuō)明

pthread_create函數(shù)功能:
??????在進(jìn)程當(dāng)中創(chuàng)建出一條線(xiàn)程
????參數(shù):
????? thread:如果進(jìn)程創(chuàng)建成功,將會(huì)往這個(gè)內(nèi)存里面填充一個(gè)線(xiàn)程的ID
????? attr:線(xiàn)程的屬性變量,創(chuàng)建線(xiàn)程的時(shí)候會(huì)依賴(lài)于這個(gè)線(xiàn)程的屬性變量去創(chuàng)建出一個(gè)線(xiàn)程,這個(gè)參數(shù)如果需要使用,需要調(diào)用pthread_attr_init函數(shù)初始化它。如果這個(gè)參數(shù)為NULL,則代表按照默認(rèn)屬性創(chuàng)建。
????????線(xiàn)程的屬性重點(diǎn)包含著:1,線(xiàn)程的分離屬性2,線(xiàn)程的棧空間大小3,線(xiàn)程的優(yōu)先級(jí)
start_routine:一個(gè)函數(shù)指針類(lèi)型,新的線(xiàn)程將會(huì)去執(zhí)行這個(gè)函數(shù)的內(nèi)容
arg:這個(gè)是傳輸給start_routine這個(gè)函數(shù)的參數(shù)
????返回值:
??????成功則返回0,失敗則返回一個(gè)錯(cuò)誤值,errno沒(méi)有被設(shè)置

示例:pthread_t?tid;int?retval;
retval = pthread_create( &tid, NULL, new_thread, "hello thread");
new_thread:函數(shù)名pthread_cancel函數(shù)功能:
????????給指定的線(xiàn)程發(fā)送一個(gè)取消指令,該線(xiàn)程默認(rèn)收到此取消指令后回退出線(xiàn)程(線(xiàn)程運(yùn)行到取消點(diǎn)函數(shù)的時(shí)候,哪些是取消點(diǎn)函數(shù)可以參照man 7 pthreads)
??????參數(shù):
????????? thread:指定的線(xiàn)程ID
??????返回值:
????????成功返回0,失敗返回一個(gè)錯(cuò)誤的數(shù)字,errno不會(huì)被設(shè)置pthread_exit函數(shù)功能:
????????結(jié)束自身,即退出一個(gè)線(xiàn)程,如果所有的線(xiàn)程都退出了,我們就會(huì)結(jié)束進(jìn)程
????參數(shù):
??????? retval:會(huì)將線(xiàn)程退出時(shí)可以返回給等待這個(gè)線(xiàn)程退出的函數(shù)(pthread_join)返回值:pthread_join函數(shù)功能:
????????等待指定的線(xiàn)程退出,并且接收其返回值。
????參數(shù):
??????? thread:指定等待退出的線(xiàn)程的ID
??????? retval:用來(lái)接收線(xiàn)程退出的返回值的void?*的變量的地址,如果不想接收可以直接填入NULL
????返回值:
????????成功返回0,失敗返回一個(gè)錯(cuò)誤的值,errno不會(huì)被設(shè)置pthread_self函數(shù)功能:獲取本線(xiàn)程ID:
無(wú)參數(shù)
返回值:成功返回該線(xiàn)程的ID值pthread_cleanup_push函數(shù)功能:
取消指令退出線(xiàn)程前的注冊(cè)函數(shù),用于執(zhí)行該函數(shù)過(guò)后,
如果接收到線(xiàn)程的取消指令,則先去執(zhí)行該函數(shù)所注冊(cè)的函數(shù)后,才能退出線(xiàn)程
參數(shù):
????? routine:如果接收到取消指令,則去執(zhí)行這個(gè)函數(shù)指針?biāo)淼暮瘮?shù)的內(nèi)容
????? arg:這個(gè)是傳輸給routine這個(gè)函數(shù)指針的函數(shù)的參數(shù)
示例:void?routine(void?*arg){printf("嘻嘻 arg=%s\n", (char?*)arg);
}
{//線(xiàn)程中
??pthread_cleanup_push(routine, "哈哈");
}pthread_cleanup_pop函數(shù)功能:
必須與上面的函數(shù)配套使用,用于清除出注冊(cè)的函數(shù),代表以后接收到取消指令我們也不會(huì)去執(zhí)行注冊(cè)的函數(shù)
參數(shù):execute:
如果該值為0,則清除出注冊(cè)函數(shù),而不去執(zhí)行注冊(cè)函數(shù)的內(nèi)容,
如果該值為非0,則清除出注冊(cè)函數(shù)的同時(shí),去運(yùn)行注冊(cè)函數(shù)的內(nèi)容

2-4

例程分享

線(xiàn)程結(jié)束自身#include?
#include?
#include?
#include?
#include?
#include?

void?*new_thread(void?*arg){
??char?*string?= arg;
??int?i;
??for(i=0; i<3; i++)
??{
????printf("arg=%s\n", string);
????sleep(1);
??}
??pthread_exit("exit");//退出一個(gè)線(xiàn)程
??
??//return "exit";
}
?
int?main(void){
??int?retval;
??void?*retpoint;
??pthread_t?tid;
?
??//創(chuàng)建一條線(xiàn)程
??retval = pthread_create( &tid, NULL, new_thread, "hello thread");
??if(retval != 0)
??{
????//perror("創(chuàng)建線(xiàn)程失敗:");
????fprintf(stderr, "創(chuàng)建線(xiàn)程失敗:%s\n", strerror(retval));
????return?-1;
??}
?
??pthread_join(tid, &retpoint);//等待回收指定的線(xiàn)程, 若tid指定的線(xiàn)程不退出,則主線(xiàn)程則阻塞在此
??
??printf("接合成功 返回值為%s\n", (char?*)retpoint);
??
??return?0;
}線(xiàn)程退出前的執(zhí)行函數(shù)實(shí)驗(yàn)#include?#include?#include?#include?#include?#include?pthread_t?tid;void?routine(void?*arg){printf("嘻嘻 arg=%s\n", (char?*)arg);
}void?*thread(void?*arg){int?i, j, z=5;//設(shè)置線(xiàn)程一旦有人對(duì)線(xiàn)程發(fā)送取消請(qǐng)求則馬上退出線(xiàn)程,不用遇到取消點(diǎn)函數(shù)
??pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);??//在線(xiàn)程被取消的時(shí)候,要求在退出線(xiàn)程之前執(zhí)行routine里面的內(nèi)容,//"哈哈"則是傳輸給routine的參數(shù)
??pthread_cleanup_push(routine, "哈哈");while(z--)
??{for( i=80000; i>0; i--)for( j=8000; j>0; j--);printf("in thread\n");
??}??//將pthread_cleanup_push所聲明如果取消線(xiàn)程時(shí)執(zhí)行的routine函數(shù)清除出去,//0代表清除而不執(zhí)行,//非0代表清除且執(zhí)行一下pthread_cleanup_push所注冊(cè)的routine函數(shù)里面的內(nèi)容??pthread_cleanup_pop(0);
??z=5;while(z--)
??{for( i=80000; i>0; i--)for( j=8000; j>0; j--);printf("next thread\n");
??}return???NULL;
}void?sighand(int?signum){??//給指定線(xiàn)程發(fā)送取消請(qǐng)求,線(xiàn)程遇到取消點(diǎn)函數(shù)才會(huì)退出
??pthread_cancel(tid);
}int?main(void){int?retval;??/*
??信號(hào)注冊(cè)
? SIGINT:Ctrl + c
??sighand: 按下Ctrl + c 時(shí)會(huì)去執(zhí)行的函數(shù)
??*/
??signal(SIGINT, sighand);
??pthread_create(&tid, NULL, thread, NULL);??//等待線(xiàn)程結(jié)束,回收資源
??retval = pthread_join(tid, NULL);if(retval != 0)
??{fprintf(stderr, "join failed :%s\n", strerror(retval));return?-1;
??}printf("join success\n");return?0;
}

03

結(jié)尾

? ? ? ?內(nèi)容分享,就先到這里了!

總結(jié)

以上是生活随笔為你收集整理的arg是什么函数_怎么实现边听歌边搜图?线程初体验:常用函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。