linux线程初学之实现打字母功能
2015-07-26 06:59
399 查看
前言
近日开始了吾之线程学习,略有所得,与进程相比,其可多线程同时执行代码段的特性,实是魅力巨大。
窃以为编程学习如武艺修炼,学了招式不过两招实在不应该,故做一打字母,实践练习。
主要思路
打字母功能最主要的地方是 “字母不停下落,若按下对应键,字母消失,且在上方出现新的字母,重复此过程”。
简而言之,就是在向屏幕输出信息时还需要实时接受用户按键,而这与我们之前学习的程序设计顺序执行是相冲突的,但线程可以解决这个问题。
流程简述
关闭输入缓冲区以及输入回显。
创建全局变量,保存要显示的字符,以及其坐标位置。
初始化字符串,采用随机数的方式为其赋值,并为其坐标赋值。
创建新线程,线程对应函数功能为 清屏后输出输出字符于各自对应坐标 并每次循环后,给每个子符的x坐标值加一
在原线程中也设置一循环,实时接收用户输入,根据用户输入 判断按键是否正确,若正确则重新对该字符随机赋值,否则重新输入。
实时判断,是否有字母超过下边界,若有,则程序结束
输入缓存区与输入回显
代码
结语
因为主要目的是对线程的学习,所以在打字母的基本功能实现后并未实现其他功能。
毕竟是初学,有什么地方有误,欢迎批评指正。
近日开始了吾之线程学习,略有所得,与进程相比,其可多线程同时执行代码段的特性,实是魅力巨大。
窃以为编程学习如武艺修炼,学了招式不过两招实在不应该,故做一打字母,实践练习。
主要思路
打字母功能最主要的地方是 “字母不停下落,若按下对应键,字母消失,且在上方出现新的字母,重复此过程”。
简而言之,就是在向屏幕输出信息时还需要实时接受用户按键,而这与我们之前学习的程序设计顺序执行是相冲突的,但线程可以解决这个问题。
流程简述
关闭输入缓冲区以及输入回显。
创建全局变量,保存要显示的字符,以及其坐标位置。
初始化字符串,采用随机数的方式为其赋值,并为其坐标赋值。
创建新线程,线程对应函数功能为 清屏后输出输出字符于各自对应坐标 并每次循环后,给每个子符的x坐标值加一
在原线程中也设置一循环,实时接收用户输入,根据用户输入 判断按键是否正确,若正确则重新对该字符随机赋值,否则重新输入。
实时判断,是否有字母超过下边界,若有,则程序结束
输入缓存区与输入回显
代码
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<pthread.h> #include<unistd.h> #include<time.h> char 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探索之旅】第一部分第二课:下载Linux,免费的噢
- 【Linux探索之旅】第一部分第三课:测试并安装Ubuntu
- 【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装
- 【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装
- 【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装
- Linux(android) 磁盘及分区基础知识
- CentOS 6.5升级Python和安装IPython
- Linux内核简介(1-1)
- confluence5.65+CentOS+mysql安装破解
- CentOS 无人值守安装(ftp模式)
- cacti+CentOS6.5
- Centos中二级域名绑定二级目录的方法
- Linux禁止非WHEEL用户使用SU命令
- linux内核移植失败问题
- Linux下安装php加速软件Xcache的方法
- 阿里云 centos 6.5 安装yii2
- linux下的软件管理器之DPKG
- 变更 Linux、Ubuntu 时区、时间
- linux性能分析命令-扫盲贴
- linux c 创建进程