本期分享的小练习如下:
创建一个媒体线程,线程启动时打印"MediaThread start",然后间隔1s打印"MediaThread running…"
创建一个智能线程,线程启动时打印"SmartThread start",然后间隔2s打印"SmartThread running…"
创建一个告警线程,线程启动时打印"AlarmThread start",然后间隔5s打印"AlarmThread running…"
创建一个日志线程,线程启动时打印"LogThread start",然后间隔10s打印"LogThread running…"
创建一个主控线程,线程负责接收’a’ ‘b’ ‘c’ ‘d’字符
如果接收到’a’,媒体线程如果正在打印则停止打印
媒体线程如果停止打印则继续打印
如果接收到’b’,智能线程如果正在打印则停止打印
智能线程如果停止打印则继续打印
如果接收到’c’,告警线程如果正在打印则停止打印
告警线程如果停止打印则继续打印
如果接收到’d’,日志线程如果正在打印则停止打印
日志线程如果停止打印则继续打印
以下附上解决这个问题的源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
int flag1 = 0; //四个功能标志
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;
void *MediaThread(void *arg)
{
char *p = arg;
while (1)
{
if (0 == *p)
{
break;
}
sleep(1);
printf("MediaThread running...1s\n");
}
return NULL;
}
void *SmartThread(void *arg)
{
char *p = arg;
while (1)
{
if (0 == *p)
{
break;
}
sleep(2);
printf("SmartThread running...2s\n");
}
return NULL;
}
void *AlarmThread(void *arg)
{
char *p = arg;
while (1)
{
if (0 == *p)
{
break;
}
sleep(5);
printf("AlarmThread running...5s\n");
}
return NULL;
}
void *LogThread(void *arg)
{
char *p = arg;
while (1)
{
if (0 == *p)
{
break;
}
sleep(10);
printf("LogThread running...10s\n");
}
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t tid[4];
int i = 0;
char mode = -1; //模式选择变量
while (1)
{
mode = getchar(); //从终端接收模式
if ('a' == mode)
{
flag1 = !flag1; //更改功能标志,1执行,0退出
if (1 == flag1)
{
pthread_create(&tid[0], NULL, MediaThread, &flag1); //创建线程并将功能标志传入
}
else if (0 == flag1) //标志为0时,线程结束并且进程中回收线程空间
{
pthread_join(tid[0], NULL);
}
}
else if ('b' == mode)
{
flag2 = !flag2;
if (1 == flag2)
{
pthread_create(&tid[1], NULL, SmartThread, &flag2);
}
else if (0 == flag2)
{
pthread_join(tid[1], NULL);
}
}
else if ('c' == mode)
{
flag3 = !flag3;
if (1 == flag3)
{
pthread_create(&tid[2], NULL, AlarmThread, &flag3);
}
else if (0 == flag3)
{
pthread_join(tid[2], NULL);
}
}
else if ('d' == mode)
{
flag4 = !flag4;
if (1 == flag4)
{
pthread_create(&tid[3], NULL, LogThread, &flag4);
}
else if (0 == flag4)
{
pthread_join(tid[3], NULL);
}
}
else if ('q' == mode)
{
exit(0);
}
// pthread_create(&tid[i], NULL, p[i], &mode);
}
return 0;
}
本期的分享就到这里结束啦!欢迎小伙伴们私信留言哦!