#define
HIGHEST_THREAD0x00
#define
ABOVE_AVE_THREAD0x3F
#define
NORMAL_THREAD0x7F
#define
BELOW_AVE_THREAD0xBF
#define
LOWEST_THREAD0xFF
#define
SLEEPDELAY1
#define
FORLOOPDELAY2
#define
NODELAY3

HWNDhWnd;
HANDLE_hThread[
5
];
UINT_uDelayType
=
NODELAY;
//
类型
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
inti;
DWORDThreadID[5];
staticHMENUhMenu;
staticHANDLEhMasterThread;

staticDWORDThreadArg[5]=
{HIGHEST_THREAD,//0x00
ABOVE_AVE_THREAD,//0x3F
NORMAL_THREAD,//0x7F
BELOW_AVE_THREAD,//0xBF
LOWEST_THREAD//0xFF
};
switch(message)


{
caseWM_CREATE:


{
hMenu=GetMenu(hWnd);
hMasterThread=GetCurrentThread();
SetThreadPriority(hMasterThread,THREAD_PRIORITY_HIGHEST);
for(i=0;i<5;i++)
_hThread[i]=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadProc,
&ThreadArg[i],
CREATE_SUSPENDED,
&ThreadID[i]);
SetThreadPriority(_hThread[0],THREAD_PRIORITY_HIGHEST);
SetThreadPriority(_hThread[1],THREAD_PRIORITY_ABOVE_NORMAL);
SetThreadPriority(_hThread[2],THREAD_PRIORITY_NORMAL);
SetThreadPriority(_hThread[3],THREAD_PRIORITY_BELOW_NORMAL);
SetThreadPriority(_hThread[4],THREAD_PRIORITY_LOWEST);
}
break;
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//Parsethemenuselections:
switch(wmId)


{
caseIDM_ABOUT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
caseIDM_RESUME:
EnableMenuItem(hMenu,IDM_RESUME,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_SUSPEND,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);
for(i=0;i<5;i++)
ResumeThread(_hThread[i]);
return(0);
caseIDM_SUSPEND:
for(i=0;i<5;i++)
SuspendThread(_hThread[i]);
EnableMenuItem(hMenu,IDM_SUSPEND,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_RESUME,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);
return(0);
caseIDM_FORLOOP:
_uDelayType=FORLOOPDELAY;
EnableMenuItem(hMenu,IDM_FORLOOP,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_SLEEP,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_NODELAY,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);
return(0);
caseIDM_SLEEP:
_uDelayType=SLEEPDELAY;
EnableMenuItem(hMenu,IDM_SLEEP,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_FORLOOP,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_NODELAY,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);
return(0);
caseIDM_NODELAY:
_uDelayType=NODELAY;
EnableMenuItem(hMenu,IDM_NODELAY,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_FORLOOP,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_SLEEP,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);
return(0);
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:


{
hdc=BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
}
break;
caseWM_DESTROY:


{
for(i=0;i<5;i++)
TerminateThread(_hThread[i],0);
PostQuitMessage(0);
}
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}

VOIDThreadProc(DWORD
*
ThreadArg)

{
RECTrect;
HDChDC;
HANDLEhBrush,hOldBrush;
DWORDdwThreadHits=0;
charcBuf[80];
intiThreadNo,i;
GetClientRect(hWnd,&rect);
hDC=GetDC(hWnd);
hBrush=CreateSolidBrush(RGB(*(ThreadArg),*(ThreadArg),*(ThreadArg)));//跑て礶肅︹
hOldBrush=SelectObject(hDC,hBrush);

switch(*ThreadArg)
{
caseHIGHEST_THREAD:iThreadNo=0;break;
caseABOVE_AVE_THREAD:iThreadNo=1;break;
caseNORMAL_THREAD:iThreadNo=2;break;
caseBELOW_AVE_THREAD:iThreadNo=3;break;
caseLOWEST_THREAD:iThreadNo=4;break;
}
sprintf(cBuf,"T%d",iThreadNo);
TextOut(hDC,*(ThreadArg),rect.bottom-150,(LPCWSTR)(LPCSTR)cBuf,strlen(cBuf));
sprintf(cBuf,"P=%d",GetThreadPriority(_hThread[iThreadNo]));
TextOut(hDC,*(ThreadArg),rect.bottom-130,(LPCWSTR)(LPCSTR)cBuf,strlen(cBuf));
do


{
dwThreadHits++;
Rectangle(hDC,*(ThreadArg),rect.bottom-(dwThreadHits/10),
*(ThreadArg)+0x40,rect.bottom);
if(_uDelayType==SLEEPDELAY)
Sleep(10);
elseif(_uDelayType==FORLOOPDELAY)
for(i=0;i<30000;i++);
else//_uDelayType==NODELAY)


{}
}while(dwThreadHits<1000);
hBrush=SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
ReleaseDC(hWnd,hDC);
}
2.C++中的RTTI
#include
<
typeinfo.h
>
#include
<
iostream
>
using
namespace
std;
#include
<
string
.h
>

class
graphicImage

{
protected:
charname[80];
public:
graphicImage()


{
strcpy(name,"graphicImage");
}
virtualvoiddisplay()


{
cout<<"Displayagenericimage."<<endl;
}
char*getName()


{
returnname;
}
}
;
//
----------------------------------------------------------------
class
GIFimage:
public
graphicImage

{
public:
GIFimage()


{
strcpy(name,"GIFimage");
}
voiddisplay()


{
cout<<"DisplayaGIFfile."<<endl;
}
}
;
class
PICTimage:
public
graphicImage

{
public:
PICTimage()


{
strcpy(name,"PICTimage");
}
voiddisplay()


{
cout<<"DisplayaPICTfile."<<endl;
}
}
;
//
----------------------------------------------------------------
void
processFile(graphicImage
*
type)

{
if(typeid(GIFimage)==typeid(*type))


{
((GIFimage*)type)->display();
}
elseif(typeid(PICTimage)==typeid(*type))


{
((PICTimage*)type)->display();
}
else
cout<<"Unknowntype!"<<(typeid(*type)).name()<<endl;
}
void
main()

{
graphicImage*gImage=newGIFimage();
graphicImage*pImage=newPICTimage();
processFile(gImage);
processFile(pImage);
}
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />