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; }