我这里有个两函数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
提交
取消