www.pudn.com > testThreadPool.rar > ThreadPool.cpp


#include  
#include  
#include  
     
#define   MYMESSAGE   (WM_USER+100) 
     
HANDLE  handle[8]; 
DWORD   dw[8]; 
int		ndw[8]; 
bool    busy[8]; 
 
void dosomething() 
{ 
	Beep( 250, 250); 
	cout << "asdfsadf" << endl; 
} 
 
DWORD WINAPI ThreadProc( void* p)	//线程控制函数 
{ 
	int nn = (int)(*(int*)p); 
    //初始化并建立数据库连接; 
    MSG msg; 
    while(::GetMessage( &msg, NULL, 0, 0)) 
    { 
        switch(msg.message) 
        { 
        case MYMESSAGE: 
			{ 
				dosomething();//在这里完成主程序传来的任务 
				busy[nn] = false;	//工作完成,设置为不忙 
			} 
			break; 
        case WM_QUIT: 
            return 0; 
        default: 
            break; 
	    } 
    } 
    return 0; 
} 
     
LRESULT MessageProc( MSG &msg)   //向线程池发送消息 
{ 
	for(int i = 0; i < 8; i++) 
	{ 
		if(!busy[i])   //寻找一个空闲的线程 
		{ 
			busy[i]=true; //设置为忙 
			while(!(::PostThreadMessage( dw[i], msg.message, msg.wParam, msg.lParam))) 
			{ 
				Sleep( 50); 
			} 
			//向线程ID为dw[i]的线程发送消息 
		} 
	} 
     return 0; 
} 
 
int main() 
{ 
    //初始化; 
	int i; 
	for( i = 0; i < 8; i++) //创建模拟线程池 
    { 
		busy[i] = false; 
		//初始化为有空闲 
        handle[i] = ::CreateThread( NULL, 0, ThreadProc, &i, 0, &dw[i]); 
		Sleep( 10);// 目的等待各个线程创建完毕 
        //建立一组线程,线程的ID放在dw[i]里 
    } 
	Sleep( 1000); // 目的等待各个线程创建完毕再发送消息 
    MSG   msg; 
	msg.message = MYMESSAGE; 
	//msg.wParam = "ASDF"; 
	MessageProc(msg);	//向线程池发送一个msg消息,要该线程开始工作 
	Sleep( 1000); 
	for( i = 0; i < 8; i++) 
	{ 
		cout << busy[i] << endl; 
	} 
	return 0; 
 }