一、标准IO函数应用
标准IO函数时候讲解的时钟代码,要求输入quit字符串后,结束进程
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<pthread.h>
#include<unistd.h>
void *pathtime(void*arg)
{
time_t t=0;
struct tm *info=NULL;
while(1)
{
t=time(NULL);
info=localtime(&t);
if(info==NULL)
{
perror("localtime");
return NULL;
}
printf("%d.%02d.%02d %02d:%02d:%02d\r",info->tm_year+1900,info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min,info->tm_sec);
fflush(stdout);
sleep(1);
}
}
int main(int argc, const char *argv[])
{
pthread_t tid;
int res=pthread_create(&tid,NULL,pathtime,NULL);
if(res!=0)
{
fprintf(stderr,"pthread_create faild__%d__",__LINE__);
return -1;
}
while(1)
{
char str[10]="";
scanf("%s",str);
if(strcmp(str,"quit")==0)
{
exit(0);
}
}
return 0;
}
二、线程应用
需求:
- 定义一个全局变量 char buf[] = "1234567",创建两个线程,不考虑退出条件。
- A线程循环打印buf字符串,
- B线程循环倒置buf字符串,即buf中本来存储1234567,倒置后buf中存储7654321. 不打印
- 倒置不允许使用辅助数组。
- A线程打印出来的结果只能为 1234567 或者 7654321 不允许出现7634521 7234567
- 不允许使用sleep函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>
char buf[]="1234567";
int flag=0;
void*callback_printf(void *arg)
{
while(1)
{
if(flag==0)
{
printf("%s\n",buf);
flag=1;
}
}
pthread_exit(NULL);
}
void* callback_swap(void*arg)
{
char *start;
char *end;
char temp;
while(1)
{
if(flag==1)
{
start=buf;
end=start+strlen(buf)-1;
while(start<end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
flag=0;
}
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid;
pthread_t tid_1;
int res=pthread_create(&tid,NULL,callback_printf,NULL);
if(res!=0)
{
fprintf(stderr,"pthread_create faild__%d__",__LINE__);
return -1;
}
pthread_detach(tid);
int ret=pthread_create(&tid_1,NULL,callback_swap,NULL);
{
if(ret!=0)
{
fprintf(stderr,"pthread_create faild__%d__",__LINE__);
return -1;
}
}
pthread_join(tid_1,NULL);
return 0;
}