程序:
#include <iostream.h>
#include <process.h>
#include <windows.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
BOOL repeat=true;void CharThread(void *posChar);
void NumThread(void *posNum);
void KillThread(void *dummy);int main(int argc,char* argv[])
{
COORD posChar,posNum;
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&csbi);
posChar.X=0;
posChar.Y=0;
if(_beginthread(CharThread,0,(void*)&posChar)==-1)
{
printf("create thread 1 failed!\n");
return -1;
}
posNum.X=csbi.dwMaximumWindowSize.X;
posNum.Y=csbi.dwMaximumWindowSize.Y;
if(_beginthread(NumThread,0,(void*)&posNum)==-1)
{
printf("create thread 2 failed !\n");
return -1;
}
while(repeat)
{
Sleep(200000);
if(_beginthread(KillThread,0,NULL)==-1)
{
printf("create thread kill failed");
return -1;
}
}
return 0;
}
void CharThread(void* posChar)
{
COORD newPos;
DWORD result;
char *str="hello";
char *str1=" ";
int i=0;
bool up=true;
while(repeat)
{
newPos.X=((COORD*)posChar)->X+i;
newPos.Y=((COORD*)posChar)->Y+i;
WriteConsoleOutputCharacter(hStdOut,str,6,newPos,&result);
Sleep(50);
WriteConsoleOutputCharacter(hStdOut,str1,6,newPos,&result);
if(up)
{
i++;
if(i==25)
up=false;
}
else
{
i--;
if(i==0)
up=true;
}
}
}
void NumThread(void* posNum)
{
COORD newPos;
DWORD result;
WORD attr;
char *str="GOOD";
char *str1=" ";
int i=0;
bool up=true;
while(repeat)
{
newPos.X=((COORD*)posNum)->X-i;
newPos.Y=i;
WriteConsoleOutputCharacter(hStdOut,str,5,newPos,&result);
Sleep(50);
WriteConsoleOutputCharacter(hStdOut,str1,5,newPos,&result);
if(up)
{
i++;
if(i==25)
up=false;
}
else
{
i--;
if(i==0)
up=true;
} }
}
void KillThread(void* dummy)
{
repeat=false;
}
错误:
test9.cpp(22) : error C2065: '_beginthread' : undeclared identifier
Error executing cl.exe.
#include <iostream.h>
#include <process.h>
#include <windows.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
BOOL repeat=true;void CharThread(void *posChar);
void NumThread(void *posNum);
void KillThread(void *dummy);int main(int argc,char* argv[])
{
COORD posChar,posNum;
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&csbi);
posChar.X=0;
posChar.Y=0;
if(_beginthread(CharThread,0,(void*)&posChar)==-1)
{
printf("create thread 1 failed!\n");
return -1;
}
posNum.X=csbi.dwMaximumWindowSize.X;
posNum.Y=csbi.dwMaximumWindowSize.Y;
if(_beginthread(NumThread,0,(void*)&posNum)==-1)
{
printf("create thread 2 failed !\n");
return -1;
}
while(repeat)
{
Sleep(200000);
if(_beginthread(KillThread,0,NULL)==-1)
{
printf("create thread kill failed");
return -1;
}
}
return 0;
}
void CharThread(void* posChar)
{
COORD newPos;
DWORD result;
char *str="hello";
char *str1=" ";
int i=0;
bool up=true;
while(repeat)
{
newPos.X=((COORD*)posChar)->X+i;
newPos.Y=((COORD*)posChar)->Y+i;
WriteConsoleOutputCharacter(hStdOut,str,6,newPos,&result);
Sleep(50);
WriteConsoleOutputCharacter(hStdOut,str1,6,newPos,&result);
if(up)
{
i++;
if(i==25)
up=false;
}
else
{
i--;
if(i==0)
up=true;
}
}
}
void NumThread(void* posNum)
{
COORD newPos;
DWORD result;
WORD attr;
char *str="GOOD";
char *str1=" ";
int i=0;
bool up=true;
while(repeat)
{
newPos.X=((COORD*)posNum)->X-i;
newPos.Y=i;
WriteConsoleOutputCharacter(hStdOut,str,5,newPos,&result);
Sleep(50);
WriteConsoleOutputCharacter(hStdOut,str1,5,newPos,&result);
if(up)
{
i++;
if(i==25)
up=false;
}
else
{
i--;
if(i==0)
up=true;
} }
}
void KillThread(void* dummy)
{
repeat=false;
}
错误:
test9.cpp(22) : error C2065: '_beginthread' : undeclared identifier
Error executing cl.exe.
#include <process.h> /* _beginthread, _endthread */
#include <stddef.h>
#include <stdlib.h>
#include <conio.h>
*
* _beginthread _endthread
*
*
* This program requires the multithreaded library. For example,
* compile with the following command line:
* CL /MT /D "_X86_" BEGTHRD.C
*
* If you are using the Visual C++ development environment, select the
* Multi-Threaded runtime library in the compiler Project Settings
* dialog box.
*
*/#include <windows.h>
#include <process.h> /* _beginthread, _endthread */
#include <stddef.h>
#include <stdlib.h>
#include <conio.h>void Bounce( void *ch );
void CheckKey( void *dummy );/* GetRandom returns a random integer between min and max. */
#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))BOOL repeat = TRUE; /* Global repeat flag and video variable */
HANDLE hStdOut; /* Handle for console window */
CONSOLE_SCREEN_BUFFER_INFO csbi; /* Console information structure */void main()
{
CHAR ch = 'A'; hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); /* Get display screen's text row and column information. */
GetConsoleScreenBufferInfo( hStdOut, &csbi ); /* Launch CheckKey thread to check for terminating keystroke. */
_beginthread( CheckKey, 0, NULL ); /* Loop until CheckKey terminates program. */
while( repeat )
{
/* On first loops, launch character threads. */
_beginthread( Bounce, 0, (void *) (ch++) ); /* Wait one second between loops. */
Sleep( 1000L );
}
}/* CheckKey - Thread to wait for a keystroke, then clear repeat flag. */
void CheckKey( void *dummy )
{
_getch();
repeat = 0; /* _endthread implied */}/* Bounce - Thread to create and and control a colored letter that moves
* around on the screen.
*
* Params: ch - the letter to be moved
*/
void Bounce( void *ch )
{
/* Generate letter and color attribute from thread argument. */
char blankcell = 0x20;
char blockcell = (char) ch;
BOOL first = TRUE;
COORD oldcoord, newcoord;
DWORD result;
/* Seed random number generator and get initial location. */
srand( _threadid );
newcoord.X = GetRandom( 0, csbi.dwSize.X - 1 );
newcoord.Y = GetRandom( 0, csbi.dwSize.Y - 1 );
while( repeat )
{
/* Pause between loops. */
Sleep( 100L ); /* Blank out our old position on the screen, and draw new letter. */
if( first )
first = FALSE;
else
WriteConsoleOutputCharacter( hStdOut, &blankcell, 1, oldcoord, &result );
WriteConsoleOutputCharacter( hStdOut, &blockcell, 1, newcoord, &result ); /* Increment the coordinate for next placement of the block. */
oldcoord.X = newcoord.X;
oldcoord.Y = newcoord.Y;
newcoord.X += GetRandom( -1, 1 );
newcoord.Y += GetRandom( -1, 1 ); /* Correct placement (and beep) if about to go off the screen. */
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; /* If not at a screen border, continue, otherwise beep. */
else
continue;
Beep( ((char) ch - 'A') * 100, 175 );
}
/* _endthread given to terminate */
_endthread();
}