前几天学习了一些基本的Win32 多线程知识,为了巩固一下多线程,特意在书上找了一些简单的代码来练习,以此加深对多线程的理解。
简单例子:在控制台随机的显示字符
#include <iostream> #include <windows.h> #include <process.h> #include <ctime> #include <cstdlib> using namespace std; CONSOLE_SCREEN_BUFFER_INFO csbi;//描述控制台的信息结构 HANDLE hStdOut;//控制台窗口句柄 bool repeat = true;//控制程序是否继续运行 void stopRunning(); void Thread(LPVOID lpParam); int getRandom(int,int); int main() { char c='A'; hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hStdOut,&csbi); //_beginthread(stopRunning,0,NULL); CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)stopRunning,NULL,NULL,NULL); while (repeat) { CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Thread,&c,NULL,NULL); c++; Sleep(1000); } return 0; } /************************************************************************/ /* stopRunning 等待键盘输入以便终止程序 */ /************************************************************************/ void stopRunning() { getchar(); repeat = false; } /************************************************************************/ /* Thread线程负责创建和控制在屏幕上四处移动的色彩颜色 */ /************************************************************************/ void Thread(LPVOID lpParam) { char *p=(char*)lpParam; //cout<<*p<<endl; //根据线程参数产生颜色 char blankcell=0x20; char blockcell=*p; bool first = true; COORD oldcoord,newcoord; DWORD result; //根据当前时间产生一个随机数 newcoord.X = getRandom(0,csbi.dwSize.X-1); newcoord.Y = getRandom(0,csbi.dwSize.Y-1); while (repeat) { Sleep(100); if (first) { first=false; } else { //cout<<"here "; WriteConsoleOutputCharacter(hStdOut,&blockcell,1,oldcoord,&result); } //位置转换 oldcoord.X = newcoord.X; oldcoord.Y = newcoord.Y; newcoord.X += getRandom(-5,5); newcoord.Y += getRandom(-5,5); //如果将要超出屏幕,那么得对位置进行调整 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((*p-'A')*100,175); } //ExitThread() //_endthread(); } /************************************************************************/ /* 产生一个min和max间的随机数 */ /************************************************************************/ int getRandom(int min,int max) { srand(time(0)); return rand()%(max-min+1)+min; } /************************************************************************/
运行时需要如图设置
运行效果: