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

程序功能

  • 【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);
    }
}

结果展示

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31839479/article/details/52350843
文章标签: 多线程 c++
个人分类: 多线程
上一篇【笔试】 合唱团
下一篇【STL】list的常用方法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭