1、使用pthread庫執行多線程,這個是Linux下的線程庫 Windows下應該有自己的API,不過這種東西壹般還是以Linux為標準。pthread_create()創建壹個線程,傳入fun()的函數指針就行了。然後這個Beep()的需求要進行線程間通信,可以用***享內存的方法,設壹個bool變量flag***享,然後beep的時候設為false,beep完設成true。fun()裏面每次看壹下這個flag,是false的話就不做動作等下壹秒,基本可以滿足需求。
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;
}