第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我想要每1秒輸出一個(gè)數(shù),但是執(zhí)行到Beep函數(shù)就會(huì)阻塞8秒 ,求多線程方法解決這個(gè)問(wèn)題?

我想要每1秒輸出一個(gè)數(shù),但是執(zhí)行到Beep函數(shù)就會(huì)阻塞8秒 ,求多線程方法解決這個(gè)問(wèn)題?

天涯盡頭無(wú)女友 2023-03-02 22:18:00
我這里有個(gè)兩函數(shù)int i=0;void fun(){Sleep(1000);printf("%d\n",i);}還有一個(gè)void sound(){Beep(2000,8000);//響8秒}
查看完整描述

2 回答

?
慕桂英4014372

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;}


查看完整回答
反對(duì) 回復(fù) 2023-03-06
?
MMTTMM

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è)可以滿足需求了。

查看完整回答
反對(duì) 回復(fù) 2023-03-06
  • 2 回答
  • 0 關(guān)注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)