2 回答
TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
1、使用pthread庫(kù)執(zhí)行多線程,這個(gè)是Linux下的線程庫(kù) Windows下應(yīng)該有自己的API,不過(guò)這種東西一般還是以Linux為標(biāo)準(zhǔn)。pthread_create()創(chuàng)建一個(gè)線程,傳入fun()的函數(shù)指針就行了。
2、例程:
#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h>#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number=0, i;void *thread1(){printf ("thread1 : I'm thread 1\n");for (i = 0; i < MAX; i++){printf("thread1 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(2);}printf("thread1 :主函數(shù)在等我完成任務(wù)嗎?\n");pthread_exit(NULL);}void *thread2(){printf("thread2 : I'm thread 2\n");for (i = 0; i < MAX; i++){printf("thread2 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(3);}printf("thread2 :主函數(shù)在等我完成任務(wù)嗎?\n");pthread_exit(NULL);}void thread_create(void){int temp;memset(&thread, 0, sizeof(thread)); //comment1/*創(chuàng)建線程*/if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2printf("線程1創(chuàng)建失敗!\n");elseprintf("線程1被創(chuàng)建\n");if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3printf("線程2創(chuàng)建失敗");elseprintf("線程2被創(chuàng)建\n");}void thread_wait(void){/*等待線程結(jié)束*/if(thread[0] !=0) { //comment4pthread_join(thread[0],NULL);printf("線程1已經(jīng)結(jié)束\n");}if(thread[1] !=0) { //comment5pthread_join(thread[1],NULL);printf("線程2已經(jīng)結(jié)束\n");}}int main(){/*用默認(rèn)屬性初始化互斥鎖*/pthread_mutex_init(&mut,NULL);printf("我是主函數(shù)哦,我正在創(chuàng)建線程,呵呵\n");thread_create();printf("我是主函數(shù)哦,我正在等待線程完成任務(wù)阿,呵呵\n");thread_wait();return 0;} |
TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用pthread庫(kù)執(zhí)行多線程,這個(gè)是Linux下的線程庫(kù) Windows下應(yīng)該有自己的API,不過(guò)這種東西一般還是以Linux為標(biāo)準(zhǔn)。pthread_create()創(chuàng)建一個(gè)線程,傳入fun()的函數(shù)指針就行了。
然后這個(gè)Beep()的需求要進(jìn)行線程間通信,可以用共享內(nèi)存的方法,設(shè)一個(gè)bool變量flag共享,然后beep的時(shí)候設(shè)為false,beep完設(shè)成true。fun()里面每次看一下這個(gè)flag,是false的話就不做動(dòng)作等下一秒,基本可以滿足需求。
這樣做的好處是實(shí)現(xiàn)簡(jiǎn)單,但時(shí)間是以1s為單位的。如果要8秒結(jié)束立刻執(zhí)行,需要用條件變量的方法來(lái)控制,比較復(fù)雜,這樣的實(shí)現(xiàn)方式一個(gè)可以滿足需求了。
添加回答
舉報(bào)
