linux ncurses界面编程网上资料很多,这里不再详述,这里只给一个例子。该示例给出了一个左右跳动的字符串数组景象:

//Compile: gcc -g ncurses_demo.c -o ncurses_demo -lpthread -lncurses
//Run: ./ncureses_demo 1 2 3 4 5 6 7 8 9 0
//Usage: q  quit, 空白 全部反向, 0-9, 指定某行字符反向显示
//#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <curses.h>
#include <pthread.h>
#include <unistd.h>#define MAXMSG 10   //最多允许用户输入的字符串个数,超过的部分会忽略, 也是创建的线程数
#define TUNIT 20000  //usleep函数休眠的时间因子struct propset
{char *str; //显示的字符串int row;   //行数, 一个线程对应一行int delay; //超时时间int dir;   //方向, 向左或是向右
};int setup (int, char **, struct propset *);
void *animate (void *arg);pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;int main (int argc, char *argv[])
{int c;pthread_t thrds[MAXMSG];struct propset props[MAXMSG];int num_msg;int i;if (argc == 1){printf ("usage:%s string ...\n", argv[0]);exit (1);}num_msg = setup (argc - 1, argv + 1, props);for (i = 0; i < num_msg; i++){                         //用户输入几个字符串就创建几个线程if (pthread_create (&thrds[i], NULL, animate, &props[i])){                        //若成功创建线程会返回0fprintf (stderr, "error creating thread");endwin ();exit (0);}}while (1){c = getch ();if (c == 'Q' || c == 'q')break;               //退出if (c == ' '){                      //全部反向for (i = 0; i < num_msg; i++)props[i].dir = -props[i].dir;}if (c >= '0' && c <= '9'){                      //指定某个字符串反向i = c - '0';if (i < num_msg)props[i].dir = -props[i].dir;}}pthread_mutex_lock (&mx);  //上锁,然后取消所有的线程for (i = 0; i < num_msg; i++)pthread_cancel (thrds[i]);endwin ();return 0;
}int setup (int nstring, char *strings[], struct propset props[])
{int num_msg = (nstring > MAXMSG ? MAXMSG : nstring); //限制输入的字符串最大个数, 这里是10个int i;srand (getpid ());for (i = 0; i < num_msg; i++){props[i].str = strings[i];props[i].row = i;props[i].delay = 1 + (rand () % 15);props[i].dir = ((rand () % 2) ? 1 : -1);}initscr ();crmode ();noecho ();clear ();mvprintw (LINES - 1, 0, "'Q' to quit,'0'..'%d' to bounce", num_msg - 1);   //在屏幕底端打印字条串return num_msg;
}void *animate (void *arg)
{struct propset *info = arg;int len = strlen (info->str) + 2; //+2 for paddingint col = rand () % (COLS - len - 3);while (1){usleep (info->delay * TUNIT);pthread_mutex_lock (&mx);move (info->row, col);addch (' ');addstr (info->str);addch (' ');move (LINES - 1, COLS - 1);refresh ();pthread_mutex_unlock (&mx);col += info->dir;if (col <= 0 && info->dir == -1)info->dir = 1;else if (col + len >= COLS && info->dir == 1)info->dir = -1;}
}

用法如下:

./ncurese_demo  1 2 3 4 5 6 7 8 9 0

q  退出, 空白键 全部反向, 0-9之一  指定某行字符反向显示

运行截图

参考文献

[1].http://www.kuqin.com/cpluspluslib/20111226/316716.html

[2].http://www.cnblogs.com/Xiao_bird/archive/2009/07/21/1527947.html

[3].http://bbs.chinaunix.net/thread-162593-1-1.html
[4].http://c.chinaitlab.com/basic/952502_3.html
[5].http://blog.csdn.net/future_fighter/article/details/3715579

ncurse界面编程多线程示例相关推荐

  1. java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程

    多线程编程: 一个正在运行的程序通常称为一个进程,每一个任务称为一个线程,中能够在一个程序内运行多线程的程序称为多线程程序. 线程与进程的区别:①每个进程都需要操作系统为其分配独立的内存空间: ②而同 ...

  2. 【Java AWT 图形界面编程】使用鼠标滚轮缩放 Canvas 画布中绘制的背景图像 ( 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )

    文章目录 一.鼠标滚轮缩放的中心点设置为当前鼠标中心点 - 要点分析 1.保存当前鼠标指针指向的位置 2.根据鼠标指针指向的位置以及比例重新计算图片位置 二.绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩 ...

  3. 【JAVA小游戏+水果售卖系统】基于GUI界面编程的水果“人生”模拟系统

    [JAVA]基于GUI界面编程的水果"人生"模拟系统 一.系统主要功能及简介 二.系统体系结构 三.系统设计技术 四.编码说明 五.效果展示 一.系统主要功能及简介 该系统以JAV ...

  4. python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解

    全栈工程师开发手册 (作者:栾鹏) python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包 ...

  5. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性

    00. 目录 文章目录 00. 目录 01. 句柄 02. GetStdHandle函数 03. CloseHandle函数 04. SetConsoleTextAttribute函数 05. 十进制 ...

  6. linux QT 结束当前进程_软件特攻队|为什么 Qt 成为 c++ 界面编程的第一选择?

    一.前言 为什么说QT越来越成为界面编程的第一选择,这要从当初为什么从MFC转到QT开始说.若想把MFC开发界面想做得好看一些是十分困难的一件事,引用第三方基于MFC的界面库代码也比较混乱,而当时看到 ...

  7. android应用的界面编程----View与ViewGroup的概念

    1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...

  8. javascript函数式_JavaScript中的函数式编程—结合实际示例(第2部分)

    javascript函数式 by rajaraodv 通过rajaraodv JavaScript中的函数式编程-结合实际示例(第2部分) (Functional Programming In Jav ...

  9. C语言控制台窗口界面编程:printf格式化显示-修改字符字体、颜色和背景

    环境:cygwin-Linux+GCC PS:windows的cmd下不能实现. 在linux终端中一个ls指令得出的显示结果文件夹.文件以及不同操作权限的文件的显示颜色是不同的,那么这个是如何实现的 ...

最新文章

  1. hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟
  2. oracle统计数据库所有表的数据记录数SQL
  3. Python基础(10)--数字
  4. Java判断文件类型
  5. c++ 结构体构造函数使用总结 附一道经典模拟题
  6. 2019吉首大学计算机调剂,吉首大学2019年硕士研究生调剂考生复试情况分学院公示...
  7. P3599-Koishi Loves Construction【构造,数论】
  8. 2020年阿里云年中大促【福利】【选品】全攻略
  9. pyplot 画多个图时搅合到了一起_这些认数字游戏,宝宝最喜欢,家长可以和宝宝一起玩...
  10. MyBatis第3天
  11. Google App Engine 功能被滥用于创建无限制的钓鱼页面
  12. Python编程:数据可视化《Python编程:从入门到实践 第2版》笔记
  13. 深入浅出数据分析:最优化-用Excel求解一个线性规划问题
  14. 人体姿态识别-左肩和左肘的定位识别
  15. Android, App常用图标尺寸规范
  16. html5 合成两张图片,HTML5 Canvas笔记——图像合成
  17. Abis接口的概念和引发的商业策略
  18. mysql my.cof 配置表空间_my.conf配置大全
  19. ABB机器人的程序结构与模块属性
  20. 字节java岗位一面(凉面)

热门文章

  1. Redis 入门安装(Linux)
  2. 一个fork短码的扩展版本
  3. sskeychain使用(轻量级框架)
  4. Codeforces Round #228 (Div. 1)B
  5. MySql按日期进行统计(前一天、本周、某一天)[转载]
  6. 【转】Visual C#创建和使用ActiveX组件
  7. Linux 常用技巧记录
  8. usaco ★Stamps 邮票
  9. byte数组穿换成pcm格式_Apache Arrow:一种适合异构大数据系统的内存列存数据格式标准...
  10. tcp udp区别优缺点_CCNA必懂篇,传输层协议TCP/UDP的区别和作用