最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中pthread_create函數(shù)實現(xiàn)向線程函數(shù)傳遞參數(shù)

 更新時間:2023年05月30日 16:11:04   作者:焱齒  
本文主要介紹了C語言中pthread_create函數(shù)實現(xiàn)向線程函數(shù)傳遞參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、pthread_create函數(shù):

1、簡介:pthread_create是UNIX環(huán)境創(chuàng)建線程的函數(shù)

2、頭文件:#include <pthread.h>

3、函數(shù)聲明:

int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (*start_rtn)(void*),void *restrict arg);

4、輸入?yún)?shù):(以下做簡介,具體參見實例一目了然)

(1)tidp:事先創(chuàng)建好的pthread_t類型的參數(shù)。成功時tidp指向的內(nèi)存單元被設(shè)置為新創(chuàng)建線程的線程ID。

(2)attr:用于定制各種不同的線程屬性。APUE的12.3節(jié)討論了線程屬性。通常直接設(shè)為NULL。

(3)start_rtn:新創(chuàng)建線程從此函數(shù)開始運行。無參數(shù)是arg設(shè)為NULL即可。

(4)arg:start_rtn函數(shù)的參數(shù)。無參數(shù)時設(shè)為NULL即可。有參數(shù)時輸入?yún)?shù)的地址。當(dāng)多于一個參數(shù)時應(yīng)當(dāng)使用結(jié)構(gòu)體傳入。(以下舉例)

5、返回值:成功返回0,否則返回錯誤碼。

6、說明。

傳遞參數(shù)的時候傳地址: pthread_create(&ntid, NULL, thr_fn, &param1);

線程函數(shù)的第一句通常是獲取傳入?yún)?shù):Param tmp = *(Param *)arg;

舉例如下:

二、不向線程函數(shù)傳遞參數(shù):

#include "apue.h"
#include <pthread.h>
#include "apueerror.h"
#include <iostream>
#include <string>
using namespace std;
pthread_t ntid;
void printids(const char *s){
	pid_t		pid;
	pthread_t	tid;
	pid = getpid();
	tid = pthread_self();
	printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,
	  (unsigned long)tid, (unsigned long)tid);
}
void *thr_fn(void *arg){
    cout << "----enter sub thread--------" << endl;
	printids("new thread: ");
	cout << "Change to C++ code!!" << endl;
    cout << "----exit from sub thread----" << endl;
	return((void *)0);
}
int main(void){
	int		err;
    //第四個參數(shù)為NULL,說明沒有向線程函數(shù)傳參數(shù)。
	err = pthread_create(&ntid, NULL, thr_fn, NULL);
	if (err != 0)
		err_exit(err, "can't create thread");
	printids("main thread:");
	sleep(1);
	exit(0);
}

三、向線程函數(shù)傳遞一個參數(shù):

#include "apue.h"
#include <pthread.h>
#include "apueerror.h"
#include <iostream>
#include <string>
using namespace std;
pthread_t ntid;
void printids(const char *s){
	pid_t		pid;
	pthread_t	tid;
	pid = getpid();
	tid = pthread_self();
	printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,
	  (unsigned long)tid, (unsigned long)tid);
}
struct Param {
	int a;
	int b;
	int c;
};
void *thr_fn( void *arg ) {
    cout << "----enter sub thread--------" << endl;
	int tmp = *(int *)arg;
	cout << "tmp=" << tmp << endl;
	printids("new thread: ");
	cout << "Change to C++ code!!" << endl;
    cout << "----exit from sub thread----" << endl;
	return((void *)0);
}
int main(void){
	int		err;
	int num = 123;
    //向線程函數(shù)傳入一個參數(shù)。
	err = pthread_create(&ntid, NULL, thr_fn, &num);
	if (err != 0)
		err_exit(err, "can't create thread");
	printids("main thread:");
	sleep(1);
	exit(0);
}

四、向線程函數(shù)傳遞兩個或以上的參數(shù):

#include "apue.h"
#include <pthread.h>
#include "apueerror.h"
#include <iostream>
#include <string>
using namespace std;
pthread_t ntid;
void printids(const char *s){
	pid_t		pid;
	pthread_t	tid;
	pid = getpid();
	tid = pthread_self();
	printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,
	  (unsigned long)tid, (unsigned long)tid);
}
struct Param {
	int a;
	int b;
	int c;
};
void *thr_fn(void *arg) {
    cout << "----enter sub thread--------" << endl;
	Param tmp = *(Param *)arg;
	cout << "tmp.a=" << tmp.a << endl;
	cout << "tmp.b=" << tmp.b << endl;
	cout << "tmp.c=" << tmp.c << endl;
	printids("new thread: ");
	cout << "Change to C++ code!!" << endl;
    cout << "----exit from sub thread----" << endl;
	return((void *)0);
}
int main(void){
	int		err;
	int num = 123;
	Param param1;
	param1.a = 11;
	param1.b = 22;
	param1.c = 33;
    //通過結(jié)構(gòu)體向線程函數(shù)傳入多個參數(shù)
	err = pthread_create(&ntid, NULL, thr_fn, &param1);
	if (err != 0)
		err_exit(err, "can't create thread");
	printids("main thread:");
	sleep(1);
	exit(0);
}

執(zhí)行效果如下:

到此這篇關(guān)于C語言中pthread_create函數(shù)實現(xiàn)向線程函數(shù)傳遞參數(shù)的文章就介紹到這了,更多相關(guān)C語言 pthread_create函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++用一棵紅黑樹同時封裝出set與map的實現(xiàn)代碼

    C++用一棵紅黑樹同時封裝出set與map的實現(xiàn)代碼

    set中存儲的一般為鍵K即可,而map存儲的一般都是鍵值對KV,也就是說他們結(jié)構(gòu)是不同的,那么我們?nèi)绾尾拍苡靡活w紅黑樹同時封裝出set與map兩種容器呢,那么接下來我們具體地來研究下STL庫中是怎樣實現(xiàn)的,并且進行模擬實現(xiàn),需要的朋友可以參考下
    2024-03-03
  • C++約瑟夫環(huán)問題詳解

    C++約瑟夫環(huán)問題詳解

    大家好,本篇文章主要講的是C++約瑟夫環(huán)問題詳解 ,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Qt實現(xiàn)TCP客戶端和服務(wù)器通訊程序

    Qt實現(xiàn)TCP客戶端和服務(wù)器通訊程序

    這篇文章主要為大家詳細(xì)介紹了Qt實現(xiàn)TCP客戶端和服務(wù)器通訊程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    這篇文章主要為大家介紹了C語言預(yù)處理預(yù)編譯命令及宏定義的詳解,其中包含運行環(huán)境命名約定條件及#under等基礎(chǔ)詳解,有需要的朋友可以借鑒參考下
    2021-10-10
  • Qt實現(xiàn)解壓帶有密碼的加密文件

    Qt實現(xiàn)解壓帶有密碼的加密文件

    Quazip是Qt平臺下面的一個壓縮解壓縮庫。本文將利用Quazip實現(xiàn)解壓帶有密碼的加密文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • Qt實現(xiàn)打地鼠游戲的方法詳解

    Qt實現(xiàn)打地鼠游戲的方法詳解

    這篇文章主要和大家詳細(xì)介紹了如何利用Qt實現(xiàn)一個簡單的打地鼠游戲,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下
    2022-10-10
  • C語言Static?關(guān)鍵字解析

    C語言Static?關(guān)鍵字解析

    這篇文章主要介紹了C語言Static?關(guān)鍵字解析,C語言中staic關(guān)鍵字很簡單,簡單到你的任何一個項目中可以不寫一個staic關(guān)鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應(yīng)用,當(dāng)然在章開頭依舊要照本宣科簡述一下static關(guān)鍵字,需要的朋友可以參考一下
    2022-02-02
  • C++實現(xiàn)獲取時間戳和計算運行時長

    C++實現(xiàn)獲取時間戳和計算運行時長

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實現(xiàn)獲取時間戳和計算運行時長功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-12-12
  • C語言實現(xiàn)打印數(shù)字金字塔

    C語言實現(xiàn)打印數(shù)字金字塔

    這篇文章主要介紹了C語言實現(xiàn)打印數(shù)字金字塔方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言控制臺應(yīng)用程序GDI繪制正弦曲線

    C語言控制臺應(yīng)用程序GDI繪制正弦曲線

    這篇文章主要為大家詳細(xì)介紹了C語言控制臺應(yīng)用程序GDI繪制正弦曲線,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

东海县| 台江县| 商南县| 义乌市| 沾益县| 曲阜市| 中江县| 霍邱县| 彩票| 宝应县| 古田县| 紫金县| 湟中县| 凌云县| 阳高县| 遵义市| 长海县| 福清市| 正安县| 乐东| 壶关县| 禹州市| 北流市| 竹溪县| 罗定市| 开化县| 大冶市| 永福县| 闽清县| 喀喇沁旗| 吉安县| 甘泉县| 敦化市| 保定市| 康定县| 鱼台县| 太仆寺旗| 项城市| 苏尼特右旗| 锡林浩特市| 青浦区|