程序功能
- 【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)
bool repeat = true;
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
int main()
{
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&csbi);
CHAR ch = 'A';
_beginthread(checkKey,0,NULL);
while(repeat)
{
_beginthread(thread1,0,(void*)(ch++));
Sleep(1000L);
}
return 0;
}
void checkKey(void* p)
{
_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);
}
}
结果展示