linux线程初学之实现打字母功能

前言

近日开始了吾之线程学习,略有所得,与进程相比,其可多线程同时执行代码段的特性,实是魅力巨大。 窃以为编程学习如武艺修炼,学了招式不过两招实在不应该,故做一打字母,实践练习。

主要思路

打字母功能最主要的地方是 “字母不停下落,若按下对应键,字母消失,且在上方出现新的字母,重复此过程”。 简而言之,就是在向屏幕输出信息时还需要实时接受用户按键,而这与我们之前学习的程序设计顺序执行是相冲突的,但线程可以解决这个问题。

流程简述

关闭输入缓冲区以及输入回显。 创建全局变量,保存要显示的字符,,以及其坐标位置。 初始化字符串,采用随机数的方式为其赋值,并为其坐标赋值。

代码

str[10];char x[10];char y[10];int* thread(){int i;while(1){system(“clear”);for(i=0;i<10;i++){//输出字符于对应坐标printf(“\033[%d;%dH%c\n”,x[i],y[i],str[i]);x[i]++;}sleep(1);}return NULL;}int main(){pthread_t thid;int i;char c=’\0′;system(“stty -icanon”);system(“stty -echo”);srand((unsigned)time(NULL));for(i=0;i<10;i++){//字符串初始化str[i] = ‘a’ + rand()%26;x[i] = 2;y[i] = i*3+3;}//创建线程if( pthread_create(&thid,NULL,(void*)thread,(void*)&i)!= 0 ){printf(“Error!\n”);exit(1);}while(1){c = getchar();if(c!=’\0′){for(i=0;i<10;i++){if(c == str[i]){str[i] = ‘a’+rand()%26;x[i] = 2;c=’\0’;break;}}}for(i=0;i<10;i++){if(x[i]>=20){break;}}}system(“stty icanonon”);system(“stty echo”);return 0;}

结语

因为主要目的是对线程的学习,所以在打字母的基本功能实现后并未实现其他功能。 毕竟是初学,有什么地方有误,欢迎批评指正。

可以一个人,可以几个人,一起放松那劳累的心情或者劳累自己的身体,

linux线程初学之实现打字母功能

相关文章:

你感兴趣的文章:

标签云: