问题描述
- MFC程序的多线程处理问题
-
while(n<threadnum) { m_pthread=AfxBeginThread(ThreadImgProc,ImgInfo[n]); while(Tcount!=n) { Sleep(100); } n++; } 为何调用线程数量大于等于12个的时候会出错,小于12个则不会出错,我使用的工作站是40线程的。当调用线程数量大于12时就会提示MSVCR100.DLL模块出错。本人刚接触多线程编程,对此一点不熟,求大神解答。
解决方案
ImgInfo[n] 是什么,有没有同步。使用的工作站是40线程的是什么意思?40个cpu核心?和这个无关,是你程序的问题。
解决方案二:
ImgInfo是一个二维数组,我是用多线程做图像畸变矫正,我首先将所有的影像按照线程数量分成几组,每个线程传入的ImgInfo[i],是一系列输入图像的名称,输出图像名称还有就是要矫正图像的各类参数,以及这些图像所属线程的编号(threadcount)。
Tcount是个全局变量。
unsigned int ThreadImgProc(LPVOID lpParam)
{
InAndOutFileName *PinfoList=(InAndOutFileName *)lpParam;
int i=0;
Tcount=PinfoList[i].threadcount;
....
}
通过Tcount是否被赋予该线程的编号,来判断该线程是否以及开始执行,如果开始执行则n++,开始调用下一个线程,如果没有执行则等待Sleep(100)。
个人对于多线程编程比较小白,有什么问题求大神指出,工作站是40个cpu核心的。。
解决方案三:
理论上一个进程可以创建的线程数量可以打到进程内核对象句柄数的最大值,和CPU核心数无关。
把项目改成静态编译/MT,VS2010的东西经常出一些奇葩的bug。
问题最可能是因为你程序的问题,好好检查一下代码
解决方案四:
这么点线程不会创建不了,你这个更可能是代码中在多线程处理的时候有错误,你可以查看一下vc dll出错时的callstack。递推到你的代码再来分析。
解决方案五:
能否用waitForSingleObject来检测新开线程的状态 第一个参数是线程handle 第二个参数传0
解决方案六:
多线程演示程序(MFC)
MFC多线程程序的同步机制
MFC多线程程序的同步机制
时间: 2024-11-17 01:56:07