0
点赞
收藏
分享

微信扫一扫

智能安防项目模型


#include <stdio.h>



#include <stdlib.h>



#include <pthread.h>



#include <unistd.h>



#include <string.h>






enum event



{



THIEF = 1,//小偷来了



FIRE = 2,//发生火灾



STOP = 3,//停止所有警报



QUIT = 4 //程序结束



};






pthread_t tid[5]={0};



int ret = 0;



int flag = 0;//所有警告打开和结束标志






//定义互斥锁



pthread_mutex_t led_lock;



pthread_mutex_t camera_lock;



pthread_mutex_t alarm_lock;



pthread_mutex_t gprs_lock;



pthread_mutex_t fire_lock;






//定义条件变量



pthread_cond_t led_cond;



pthread_cond_t camera_cond;



pthread_cond_t alarm_cond;



pthread_cond_t gprs_cond;



pthread_cond_t fire_cond;






//初始化互斥锁



void init_pthread_lock()



{



pthread_mutex_init(&led_lock,NULL);



pthread_mutex_init(&camera_lock,NULL);



pthread_mutex_init(&alarm_lock,NULL);



pthread_mutex_init(&gprs_lock,NULL);



pthread_mutex_init(&fire_lock,NULL);



return;



}






//初始化条件变量



void init_pthread_cond()



{



pthread_cond_init(&led_cond,NULL);



pthread_cond_init(&camera_cond,NULL);



pthread_cond_init(&alarm_cond,NULL);



pthread_cond_init(&gprs_cond,NULL);



pthread_cond_init(&fire_cond,NULL);



return;



}









//LED灯闪烁提示



void* led_thread(void *arg)



{



while(1)



{



pthread_mutex_lock(&led_lock);



pthread_cond_wait(&led_cond,&led_lock);



pthread_mutex_unlock(&led_lock);







while(flag)



{



puts("-------------led-------------\n");



sleep(1);



}



}



return NULL;



}






//camera摄像



void* camera_thread(void *arg)



{



while(1)



{



pthread_mutex_lock(&camera_lock);



pthread_cond_wait(&camera_cond,&camera_lock);



pthread_mutex_unlock(&camera_lock);







while(flag)



{



puts("-------------camera-------------\n");



sleep(1);



}



}



return NULL;



}






//alarm响铃警报



void* alarm_thread(void *arg)



{



while(1)



{



pthread_mutex_lock(&alarm_lock);



pthread_cond_wait(&alarm_cond,&alarm_lock);



pthread_mutex_unlock(&alarm_lock);







while(flag)



{



puts("-------------alarm-------------\n");



sleep(1);



}



}



return NULL;



}






//GPRS发送短信通知



void* gprs_thread(void *arg)



{



while(1)



{



pthread_mutex_lock(&gprs_lock);



pthread_cond_wait(&gprs_cond,&gprs_lock);



pthread_mutex_unlock(&gprs_lock);







while(flag)



{



puts("-------------gprs-------------\n");



sleep(1);



}



}



return NULL;



}






//火灾提示



void* fire_thread(void *arg)



{



while(1)



{



pthread_mutex_lock(&fire_lock);



pthread_cond_wait(&fire_cond,&fire_lock);



pthread_mutex_unlock(&fire_lock);







while(flag)



{



puts("-------------fire-------------\n");



sleep(1);



}



}



return NULL;



}









void create_pthread()//创建所有线程



{



ret = pthread_create(&tid[0],NULL,led_thread,NULL);



if(ret != 0)



{



fprintf(stderr,"fail to pthread_create %s:\n",strerror(ret));



exit(EXIT_FAILURE);



}







ret = pthread_create(&tid[1],NULL,camera_thread,NULL);



if(ret != 0)



{



fprintf(stderr,"fail to pthread_create %s:\n",strerror(ret));



exit(EXIT_FAILURE);



}







ret = pthread_create(&tid[2],NULL,alarm_thread,NULL);



if(ret != 0)



{



fprintf(stderr,"fail to pthread_create %s:\n",strerror(ret));



exit(EXIT_FAILURE);



}







ret = pthread_create(&tid[3],NULL,gprs_thread,NULL);



if(ret != 0)



{



fprintf(stderr,"fail to pthread_create %s:\n",strerror(ret));



exit(EXIT_FAILURE);



}







ret = pthread_create(&tid[4],NULL,fire_thread,NULL);



if(ret != 0)



{



fprintf(stderr,"fail to pthread_create %s:\n",strerror(ret));



exit(EXIT_FAILURE);



}



return;



}






int main(int argc, const char *argv[])



{



int CMD = 0;



int i = 0;






create_pthread();



init_pthread_lock();



init_pthread_lock();






while(1)



{



printf("please input [1-4] select [THIEF FIRE STOP QUIT]:\n");



scanf("%d",&CMD);



getchar();






switch(CMD)



{



case THIEF:



flag = 1;



pthread_cond_signal(&led_cond);



pthread_cond_signal(&camera_cond);



pthread_cond_signal(&alarm_cond);



pthread_cond_signal(&gprs_cond);



break;






case FIRE:



flag = 1;



pthread_cond_signal(&alarm_cond);



pthread_cond_signal(&gprs_cond);



pthread_cond_signal(&fire_cond);



break;







case QUIT:



goto loop;



break;






case STOP:



flag = 0;



break;






default:



puts("command error!");



break;



}



}






loop:



for(i = 0;i < 5;i++)



{



pthread_cancel(tid[i]);//取消所有线程执行



}






pthread_join(tid[0],NULL);



pthread_join(tid[1],NULL);



pthread_join(tid[2],NULL);



pthread_join(tid[3],NULL);



pthread_join(tid[4],NULL);






exit(EXIT_SUCCESS);



return 0;



}

举报

相关推荐

0 条评论