【多线程】在显示屏上输出各种字符

原创 2016年08月29日 10:31:50

程序功能

  • 【1】两个线程:一个线程的功能是按下键盘终止所有的线程执行;另一个线程是不断的向屏幕上输出字符
  • 【2】向屏幕上输出字符的线程,在显示的位置草果屏幕的是时候,要发出报警声音

程序实例

#include <iostream>
#include <Windows.h>
#include <process.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int max1 = 1;
int min1 = -1;
void checkKey(void* p);
void thread1(void* p);
#define getRandom(min,max) (rand()%(int)(max-min+1) + min)///////得到min和max之间的一个数(包括min和max)
bool repeat = true;////为程序重复执行的值
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;

int main()
{
    /*srand (time(NULL));
    while(1)//////测试产生随机数
    {
        cout<<getRandom(1,10)<<endl;
        Sleep(1000L);
    }*/
    hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hStdOut,&csbi);
    CHAR ch = 'A';
    _beginthread(checkKey,0,NULL);
    while(repeat)
    {
        //cout<<"我是主线程"<<endl;
        _beginthread(thread1,0,(void*)(ch++));
        Sleep(1000L);
    }
    return 0;
}
void checkKey(void* p)/////终止用repeat变量控制的线程
{
    _getch();
    repeat = false;
}
void thread1(void* p)
{
    char blockcell = (char)p;
    bool first = true;
    COORD oldcoord,newcoord;
    DWORD result;
    srand(time(NULL));
    newcoord.X = getRandom(0,csbi.dwSize.X-1);
    newcoord.Y = getRandom(0,csbi.dwSize.Y-1);
    while(repeat)
    {
        Sleep(100L);
        if(first)
            first = false;
        else
            WriteConsoleOutputCharacter(hStdOut,&(blockcell),1,oldcoord,&result);
        oldcoord.X = newcoord.X;
        oldcoord.Y = newcoord.Y;    
        newcoord.X = newcoord.X + getRandom(min1,max1);
        newcoord.Y = newcoord.Y + getRandom(min1,max1);
        if(newcoord.X < 0)
            newcoord.X = 1;
        else if(newcoord.X == csbi.dwSize.X)
            newcoord.X = csbi.dwSize.X - 2;
        else if(newcoord.Y < 0)
            newcoord.Y = 1;
        else if(newcoord.Y == csbi.dwSize.Y)
            newcoord.Y = csbi.dwSize.Y - 2;
        else
            continue;
        Beep(((char)p - 'A') * 100,175);
    }
}

结果展示

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

C键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。

/* 键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。 */ #include #include int main () { //定义变量 char ch; ...
  • u014404513
  • u014404513
  • 2015年12月21日 16:57
  • 1158

Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数

描述 两个线程,一个打印100内的奇数一个打印100内的偶数,交替执行。 //要打印的资源 public class Num { int i=1; boolean flag = f...
  • woainiwss
  • woainiwss
  • 2016年07月24日 14:16
  • 9970

OpenGL显示文字--显示字符

OpenGL并没有直接提供显示文字的功能,并且,OpenGL也没有自带专门的字库。因此,要显示文字,就必须依赖操作系统所提供的功能了。 各种流行的图形操作系统,例如Windows系统和Linux系统,...
  • qq_35040828
  • qq_35040828
  • 2016年06月25日 14:04
  • 4238

JAVA多线程实验,字符移动、小球碰撞

  • 2010年01月04日 19:18
  • 2KB
  • 下载

多线程实现文件中字母数字及其他字符的分配

  • 2014年11月24日 15:14
  • 2KB
  • 下载

【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级

文件重定向 [java] view plaincopy #include   using namespace std;  ...
  • xiao_kou
  • xiao_kou
  • 2015年11月08日 13:55
  • 326

linux多线程实现黑客帝国字符滑屏效果

利用curses库来实现字符界面的改变,利用多线程实现每个字符的改变 设计思想:以整个屏幕为背景,随机生成26个字母以及每个字母初始的x,y值以及speed速度值,通过改变字符的y值,清屏并重绘,来...
  • lr982330245
  • lr982330245
  • 2014年02月25日 21:37
  • 1385

引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针

1、引用内部函数绑定机制 #include #include   using namespace std; using namespace std::placeholders;   /...
  • toto1297488504
  • toto1297488504
  • 2014年08月17日 00:18
  • 1526

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include template void com(T arg)//模板函数,引用无效,引用包装器 { std::cout ...
  • waldmer
  • waldmer
  • 2015年10月02日 08:22
  • 1928

04_仿函数、去转义字符、using 别名、智能指针、多线程、断言

目录 一仿函数 二转义字符 三using 别名 与c的typedef相同 四模板元编程 五智能指针 六多线程 七静态断言【目录】一、 仿函数 2 1、 仿函数, 2 二、 转义字符 2 1、 ...
  • a2604539133
  • a2604539133
  • 2017年06月05日 15:05
  • 183
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【多线程】在显示屏上输出各种字符
举报原因:
原因补充:

(最多只允许输入30个字)