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

程序功能

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

结果展示

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值