多个线程调用同一个线程函数
悬赏分:50 -
解决时间:2007-12-11 13:59
如题,能这样吗?因为有很多个操作,但是这些操作都是一样的,所以想用相同的线程函数,但是感觉运行时线程还是一个一个运行,并没有提高速度,应该是我理解错了!!老大些帮帮忙,给个建议
问题补充:
我的意思是线程处理函数,刚刚找了点资料,觉得这想法没有错,只要线程里面不用全局或者静态变量就行,要用就要锁,主要是这个问题,你这个模板太好了,我就想用这个,非常感谢
最佳答案
你提到的线程函数是一般函数还是生成线程的函数,或是用于运行特定函数的线程? 如果是在用VC中想用多个线程运行同样的任务,而这些任务之间没有通讯问题和内存共享的问题,那可以用下面的模板: DWORD WINAPI TaskThreadProc(LPVOID) { // 独立任务 // ... } void RunTaskUseMultiThread(int nThreadCount) // 线程个数为nThreadCount { HANDLE* threads = new HANDLE[nThreadCount]; // 线程句柄,对线程进行状态的控制时用到 DWORD* idThreads = new DWORD[nThreadCount]; // 线程id,给线程发消息时用到 int i; for (i = 0; i < nThreadCount; i++) { threads[i] = CreateThread( NULL, 0, TaskThreadProc, NULL, CREATE_SUSPENDED, &idThreads[i]); // 创建线程 } for (i = 0; i < nThreadCount; i++) // 由于生成的是CREATE_SUSPENDED的线程,所以这里开始让线程开始运行 ResumeThread(threads[i]); WaitForMultipleObjects(nThreadCount, threads, TRUE, INFINITE); // 等待线程运行结束 for (i = 0; i < nThreadCount; i++) CloseHandle(threads[j]); // 销毁线程 delete [] threads; delete [] idThreads; }