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

来源:互联网 发布:哪个软件可以看腐剧 编辑:程序博客网 时间:2024/05/16 08:45

程序功能

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