mfc-MFC程序的多线程处理问题

问题描述

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

mfc-MFC程序的多线程处理问题的相关文章

如何从MFC应用程序中调用.NET框架

如何发送击键到其它应用程序? 关于如何通过编程来发送 Ctrl+Alt+Del 击键? 如何从 MFC 应用程序中调用 .NET 框架? 我想编写一个应用程序,它能通过击键将信息写到另外一个应用程序的窗体中.我是不是应该发送 WM_KEYDOWN 和 WM_KEYUP 消息?有没有更好的办法? 发送 WM_KEYDOWN 和 WM_KEYUP 消息也许能行得通,但 SendInput 是专门被设计用于此目的的 API 函数.它通过 INPUT 结构数组参数来合成包括击键和鼠标事件在内的输入,每个

使用GDI+的MFC应用程序的文件打开和保存对话框

(译注:原文代码的Demo_VC7没有在同Demo_VC6一样显示滚动条视图,修改之) 开发环境:Windows XP/Server 2003/2000/NT4.0-SP6/98/Me, MS Visual Sudio 6.0/2003, GDI+ 介绍 CGdiplusFileOpenDialog和CGdiplusFileSaveAsDialog类提供了一个在GDI+的MFC应用程序轻松实现文件打开和保存对话框的方法. 主要特点是: 它们可以动态地装入关于支持图像的解码器/编码器和构建文件过滤

MFC应用程序中的菜单提示信息

我正在做一个历时很久的项目.出于某些原因,项目启动之初我们实现了自己的弹出式菜单.当工具提示信息出现之后,我们将这个功能引入了我们自己的菜单,以便当用户将鼠标停留在某个菜单项上的时候,能够出现相应的提示信息.这一功能对于我们的用户来说非常重要,因为 用它可以解释为什么某个菜单项是被禁用的.由于我们的用户对 Windows 平台越来越熟悉,他们想要外观上更标准的菜单.现在我们使用了 CMenu,但是我们失去了 出色的菜单提示信息.请问如何在 MFC 中实现菜单提示信息呢? Joakim Fager

在你的MFC应用程序中显示一个JPG文件

在VB中,我可以通过创建一个图像控件来显示一个JPG或GIF文件,但是我如何在我的MFC应用程序中显示一个JGP文件呢? 好问题!有时使用VB的程序员觉得这个很容易.只要往你的表中拖入一个图像控件,然后你就可以往下做了--然而C++程序员就不得不感到烦恼和头疼.那我们要做些什么呢,编写我们自己的JPG解压函数吗? 当然不是这样的!事实上,C/C++程序员能够使用与VB程序员所使用的非常类似(可以说是差不多)的图像控件.我并没有开玩笑.VB图像控件是基于一个叫"IPicture"的系统C

MFC框架程序中全屏显示特性的实现

在开发图像显示程序以及视频应用程序时,常常需要全屏显示特性,比如ACD See和豪杰解霸等应用都有全屏显示功能.本文将介绍如何在MFC框架程序中实现视图的全屏显示,也就是说将标题.菜单.工具栏.状态栏以及窗口的所有边框全部被隐藏,视图充满整个屏幕.并提供全屏显示与框架窗口之间的快捷切换操作. 大家知道,在MFC框架中并没有提供现成的类或者函数来实现全屏显示特性,至少我到目前为止是没有发现.但是要实现这个特性也并不难.其基本思路是调整主窗口的大小和位置,使视图的显示充满屏幕.它需要以屏幕左上角为原

MFC的程序如何通过注册表修改文件的图标

问题描述 MFC的程序如何通过注册表修改文件的图标 MFC编程实现通过修改注册表来改变文档文件的图标?不通过注册表的方法也可以. 解决方案 通过修改hkey_classes_root里的文件关联即可换图标

mfc win7 权限-MFC应用程序在win7下管理员权限的问题

问题描述 MFC应用程序在win7下管理员权限的问题 MFC开发的程序我知道可以通过配置清单文件的UAC执行级别来提示程序的权限.但问题时这样的配置在win7一定会提示UAC的对话框很不友好.在不关闭系统UAC的情况下有没有办法不弹出UAC对话框或者不设置UAC级别依旧可以拥有管理员权限呢? 解决方案 创建windows服务程序.

MFC SDI程序,如何交互式获取用户单击鼠标的坐标?

问题描述 MFC SDI程序,如何交互式获取用户单击鼠标的坐标? 我在用MFC做一个交互式绘图的小程序,工程名称为Draw.我想在CDrawView类中定义一个public成员函数,void CDrawView::GetPoint(CPoint& point),功能是让用户在客户区窗口中点击鼠标选取一点,并返回该点的坐标. 但是问题是,如何在这个函数中等待鼠标单击事件,即等待WM____LBUTTONUP消息触发后,再继续执行函数,保存点的坐标? 解决方案 ctrl+w,调出类向导,映射WM_L

按照向导创建基于mfc对话框程序,编译出现warning:C4819 和error:C2018

问题描述 按照向导创建基于mfc对话框程序,编译出现warning:C4819 和error:C2018 xp上安装的vs2010,代码都是默认生成的 解决方案 选择File->Advanced Save Options,再选择Unicode 或者http://blog.csdn.net/enjoy517905407/article/details/37958035 解决方案二: 改成Unicode字符集试试. 解决方案三: 你的文件内容是不是含有什么中文字符? 解决方案四: 你的文件中有看不见

mfc-求教一个MFC编写程序的问题

问题描述 求教一个MFC编写程序的问题 我是新手想求教大家一个问题: 有一个单文档框架程序,当一启动的时候可以在状态栏里面显示时间, 我看书中的做法是这样的: 1,先定义和插入字符串ID. 2,在CXXXAPP类里面添加一个成员变量保存数据. 3在CXXXAPP类的构造函数里面得到系统时间,然后格式化数据. 4在CMAINFRAME的ONCREATE函数里面设置上刚才格式化的时间数据. 现在不明白的地方就是书中为何要在APP类里面做2和3项呢?如果我把步骤2和3放在 别的地方可以吗? 解决方案