我這里有個兩函數int i=0;void fun(){Sleep(1000);printf("%d\n",i);}還有一個void sound(){Beep(2000,8000);//響8秒}
2 回答

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
1、使用pthread庫執行多線程,這個是Linux下的線程庫 Windows下應該有自己的API,不過這種東西一般還是以Linux為標準。pthread_create()創建一個線程,傳入fun()的函數指針就行了。
2、例程:
#include <pthread.h> #include <stdio.h> #include <sys/time.h> #include <string.h> #define MAX 10 pthread_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 :主函數在等我完成任務嗎?\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 :主函數在等我完成任務嗎?\n" ); pthread_exit(NULL); } void thread_create( void ) { int temp; memset (& thread , 0, sizeof ( thread )); //comment1 /*創建線程*/ if ((temp = pthread_create(& thread [0], NULL, thread1, NULL)) != 0) //comment2 printf ( "線程1創建失敗!\n" ); else printf ( "線程1被創建\n" ); if ((temp = pthread_create(& thread [1], NULL, thread2, NULL)) != 0) //comment3 printf ( "線程2創建失敗" ); else printf ( "線程2被創建\n" ); } void thread_wait( void ) { /*等待線程結束*/ if ( thread [0] !=0) { //comment4 pthread_join( thread [0],NULL); printf ( "線程1已經結束\n" ); } if ( thread [1] !=0) { //comment5 pthread_join( thread [1],NULL); printf ( "線程2已經結束\n" ); } } int main() { /*用默認屬性初始化互斥鎖*/ pthread_mutex_init(&mut,NULL); printf ( "我是主函數哦,我正在創建線程,呵呵\n" ); thread_create(); printf ( "我是主函數哦,我正在等待線程完成任務阿,呵呵\n" ); thread_wait(); return 0; } |

MMTTMM
TA貢獻1869條經驗 獲得超4個贊
使用pthread庫執行多線程,這個是Linux下的線程庫 Windows下應該有自己的API,不過這種東西一般還是以Linux為標準。pthread_create()創建一個線程,傳入fun()的函數指針就行了。
然后這個Beep()的需求要進行線程間通信,可以用共享內存的方法,設一個bool變量flag共享,然后beep的時候設為false,beep完設成true。fun()里面每次看一下這個flag,是false的話就不做動作等下一秒,基本可以滿足需求。
這樣做的好處是實現簡單,但時間是以1s為單位的。如果要8秒結束立刻執行,需要用條件變量的方法來控制,比較復雜,這樣的實現方式一個可以滿足需求了。
添加回答
舉報
0/150
提交
取消