关闭

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

标签: 多线程c++
316人阅读 评论(0) 收藏 举报
分类:

程序功能

  • 【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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30833次
    • 积分:1151
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:2篇
    • 译文:0篇
    • 评论:10条
    最新评论