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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

树莓派cpu检测_【树莓派3B+测评】线程的挂起与恢复CPU温度检测

發(fā)布時(shí)間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派cpu检测_【树莓派3B+测评】线程的挂起与恢复CPU温度检测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【樹莓派3B+測評(píng)】線程的掛起與恢復(fù)&CPU溫度檢測

[復(fù)制鏈接]

本帖最后由 donatello1996 于 2018-12-22 17:33 編輯

在TCP通信中,除了線程的創(chuàng)建和刪除以外,掛起和解掛也是非常重要的步驟,簡單而言,掛起線程就是讓該線程暫停執(zhí)行,一直在阻塞,而解掛線程(恢復(fù))就顧名思義了,解除掛起狀態(tài)繼續(xù)運(yùn)行,這里我再開辟一個(gè)線程用于循環(huán)檢測CPU溫度,一秒檢測一次,以確保系統(tǒng)在正常運(yùn)作。讀取溫度的方法是讀取/sys/class/thermal/thermal_zone0/temp文件的數(shù)值,將數(shù)值傳輸?shù)綐?biāo)準(zhǔn)文件流,再通過printf終端輸出:

#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"

int fd;

char buf[30];

fd = open(TEMP_PATH, O_RDONLY);

read(fd, buf, 30);

然后是線程的創(chuàng)建,除了之前的創(chuàng)建線程本身以外,還要?jiǎng)?chuàng)建互斥鎖和cond:

pthread_create(&id2,NULL,Thread_CPU_Temp,NULL);

printf("CPU溫度檢測線程建立\n");

if (pthread_mutex_init(&mut,NULL))

{

printf("互斥鎖初始化失敗\n");

}

if (pthread_cond_init(&cond,NULL))

{

printf("cond初始化失敗\n");

}

掛起和解掛其實(shí)就是對(duì)鎖和cond信號(hào)量的操作:

void thread_resume()

{

if (status == STOP)

{

pthread_mutex_lock(&mut);

status = RUN;

pthread_cond_signal(&cond);

printf("CPU溫度檢測線程恢復(fù)運(yùn)行\(zhòng)n");

pthread_mutex_unlock(&mut);

}

else

{

printf("CPU溫度檢測線程一直在運(yùn)行\(zhòng)n");

}

}

void thread_pause()

{

if (status == RUN)

{

pthread_mutex_lock(&mut);

status = STOP;

printf("CPU溫度檢測線程暫停(掛起)\n");

pthread_mutex_unlock(&mut);

}

else

{

printf("CPU溫度檢測線程一直在暫停\n");

}

}

操作cond信號(hào)量的時(shí)候必須鎖上線程的共享資源,如果該線程掛起了,那么這個(gè)線程就一直阻塞而不執(zhí)行任何操作,Linux系統(tǒng)在輪轉(zhuǎn)執(zhí)行到此線程

時(shí)間片的時(shí)候會(huì)自動(dòng)跳過此線程。

完整代碼如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "raspi_led_pwm.h"

int fd_socket;

pthread_t id1,id2;

#define RUN??1

#define STOP 0

pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

unsigned char sendbuf[100],recvbuf[100];

int thread_flag=0,status=STOP;

#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"

void *Thread_CPU_Temp(void *arg)

{

int fd;

double temp = 0;

char buf[30];

while(1)

{

pthread_mutex_lock(&mut);

while(!status)

{

pthread_cond_wait(&cond, &mut);

}

pthread_mutex_unlock(&mut);

fd = open(TEMP_PATH, O_RDONLY);

if (fd < 0)

{

fprintf(stderr, "無法打開thermal_zone0/temp文件\n");

return -1;

}

if (read(fd, buf, 30) < 0)

{

fprintf(stderr, "讀取溫度數(shù)據(jù)失敗\n");

return -1;

}

temp = atoi(buf) / 1000.0;

printf("%.2f\n", temp);

sleep(1);

}

}

void thread_resume()

{

if (status == STOP)

{

pthread_mutex_lock(&mut);

status = RUN;

pthread_cond_signal(&cond);

printf("CPU溫度檢測線程恢復(fù)運(yùn)行\(zhòng)n");

pthread_mutex_unlock(&mut);

}

else

{

printf("CPU溫度檢測線程一直在運(yùn)行\(zhòng)n");

}

}

void thread_pause()

{

if (status == RUN)

{

pthread_mutex_lock(&mut);

status = STOP;

printf("CPU溫度檢測線程暫停(掛起)\n");

pthread_mutex_unlock(&mut);

}

else

{

printf("CPU溫度檢測線程一直在暫停\n");

}

}

void *Thread_Send_buf(void *arg)

{

int len;

while(1)

{

bzero(sendbuf,100);

scanf("%s",sendbuf);

if(sendbuf[0]=='1')

{

if(thread_flag==0)

{

thread_flag=1;

pthread_create(&id2,NULL,Thread_CPU_Temp,NULL);

printf("CPU溫度檢測線程建立并處于阻塞狀態(tài)\n");

if (pthread_mutex_init(&mut,NULL))

{

printf("互斥鎖初始化失敗\n");

}

if (pthread_cond_init(&cond,NULL))

{

printf("cond初始化失敗\n");

}

}

}

else if(sendbuf[0]=='2')

{

thread_pause();

}

else if(sendbuf[0]=='3')

{

thread_resume();

}

for(len=0;sendbuf[len]!='\0';len++);

send(fd_socket,sendbuf,len,0);

}

}

int main()

{

int i=0;

int ret=-1;

wiringPiSetup();

//Raspi_LED_Init();

//Raspi_PWM_Init(100);

//pwmWrite(1,60);

/*

struct sockaddr_in sockaddr_in_comm,sockaddr_in_settings;

bzero(&sockaddr_in_settings,sizeof(sockaddr_in_settings));

sockaddr_in_settings.sin_family=AF_INET;

sockaddr_in_settings.sin_addr.s_addr=inet_addr("169.254.122.5");

sockaddr_in_settings.sin_port=htons(8087);

*/

socklen_t addrsize=sizeof(struct sockaddr);

struct sockaddr_in girladdr;

bzero(&girladdr,sizeof(girladdr)); // 清零

girladdr.sin_family=AF_INET;

girladdr.sin_port=htons(10086);

girladdr.sin_addr.s_addr=inet_addr("169.254.122.1");

int thread_1=0;

while(1)

{

while(1)

{

fd_socket=socket(AF_INET,SOCK_STREAM,0);

if(fd_socket==-1)

{

printf("套接字初始化失敗!\n");

return -1;

}

ret=connect(fd_socket,(struct sockaddr *)&girladdr,addrsize);

if(ret==0)

{

printf("與服務(wù)器建立連接\n");

ret=pthread_create(&id1,NULL,Thread_Send_buf,NULL);

if(ret==0)

printf("TCP發(fā)送阻塞線程被創(chuàng)建\n");

break;

}

}

while(1)

{

bzero(recvbuf,100);

ret=recv(fd_socket,recvbuf,100,0);

if(ret==0)

{

printf("與服務(wù)器失去連接\n");

ret=pthread_cancel(id1);

if(ret==0)

printf("TCP發(fā)送阻塞線程被取消\n");

break;

}

printf("服務(wù)器端發(fā)來信息:%s\n",recvbuf);

}

}

}

看看效果,當(dāng)輸入1的時(shí)候,創(chuàng)建CPU溫度檢測線程,輸入2的時(shí)候,線程掛起,輸入3的時(shí)候線程恢復(fù)運(yùn)行:

42.jpg (65.84 KB, 下載次數(shù): 0)

2018-12-22 17:33 上傳

43.jpg (68.92 KB, 下載次數(shù): 0)

2018-12-22 17:33 上傳

44.jpg (71.34 KB, 下載次數(shù): 0)

2018-12-22 17:33 上傳

45.jpg (126.63 KB, 下載次數(shù): 0)

2018-12-22 17:33 上傳

46.jpg (112.72 KB, 下載次數(shù): 0)

2018-12-22 17:33 上傳

總結(jié)

以上是生活随笔為你收集整理的树莓派cpu检测_【树莓派3B+测评】线程的挂起与恢复CPU温度检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 涩里番在线观看 | 欧美激情在线免费观看 | 欧美人人爽 | 又大又粗又爽18禁免费看 | 亚洲欧洲日韩国产 | 韩国av一区 | 伦理自拍| 亚洲欧美制服丝袜 | 七仙女欲春2一级裸体片 | 一区二区美女 | 一级做a爰片久久毛片潮喷 天天透天天干 | 日韩精品成人免费观看视频 | 欧美大片免费高清观看 | 秋霞黄色网 | 在线波多野结衣 | youjizz.com最新| 亚洲成年人 | 99自拍| 男男全肉变态重口高h | 亚洲女人天堂色在线7777 | 国产一区二区三区视频 | 亲吻刺激视频 | 亚洲永久免费网站 | 国产精品久久久久久久成人午夜 | 午夜天堂精品久久久久 | 亚洲欧美一区二区三区在线 | 亚洲天堂成人在线 | 欧美乱论视频 | 黄色日本视频 | 黄色的网站在线 | 色啪视频 | 深田咏美中文字幕 | 成人av片在线观看 | 生活片av | 久草视频在线观 | 天天看视频 | 狠狠干网站 | 亚洲欧美视频在线观看 | 黄色三级免费观看 | 学生孕妇videosex性欧美 | 成人激情免费视频 | 午夜高清视频 | 91国在线啪 | 欧美不卡在线 | 日本久久综合 | 高清一区二区 | 香蕉一级视频 | av大片免费在线观看 | 一级片在线观看视频 | 欧美两根一起进3p做受视频 | 天天操免费视频 | 欧美插插视频 | 欧美日韩在线影院 | 国产成人综合网 | 国产精品偷乱一区二区三区 | 一曲二曲三曲在线观看中文字幕动漫 | 欧美成人中文字幕 | 日本精品免费一区二区三区 | 国产91精品久久久久久久 | 欧美人与性动交g欧美精器 国产在线视频91 | 中文字幕二区在线观看 | 日日摸日日碰夜夜爽av | 图书馆的女友动漫在线观看 | 成人91在线观看 | 国产精品久久久久久久免费大片 | 国产黄色一级片视频 | 中文字幕一区二区三区免费视频 | 欧美乱大交xxxxx | 成人va视频 | 国产碰碰| 欧美特级一级片 | 在线视频日韩精品 | 男女性高潮免费网站 | 国产99久久久国产精品 | 亚洲精品国产精品乱码在线观看 | 久久av一区二区三区 | av站| 啪啪在线观看 | 中文字幕一二三四 | 婷婷丁香花五月天 | 黄色成年人网站 | 亚洲久久一区 | 免费毛片视频 | 亚洲热久久| 999久久久久 | 高清一区二区视频 | 日韩成人免费在线观看 | 毛片一级片 | 国产精品久久久久久久久借妻 | 天天操天天爱天天干 | 91免费高清在线观看 | 欧美国产中文 | 免费毛片在线播放 | 日韩夫妻性生活 | 精品少妇一二三区 | 日韩中文字幕一区二区三区 | 在线免费 | 欧美精品网站 | 午夜a视频 |