Debug Assertion Failed错误如何消除
- 格式:doc
- 大小:30.00 KB
- 文档页数:2
debugerror最简单处理方法嘿,朋友们!当你遇到 debugerror 这个让人头疼的家伙时,别慌!今天我就来给你讲讲最简单的处理方法。
你想想看,这就好比你走路的时候突然被一块石头绊了一跤。
咋办呢?咱不能就这么趴在那儿吧!得赶紧爬起来,看看是啥石头,下次好绕过去呀。
遇到 debugerror 也是一样的道理。
首先,你得静下心来,别被它吓住。
它不就是个小故障嘛,咱能搞定!然后呢,仔细瞅瞅出错的提示信息,就像找那块绊脚石一样。
那提示信息里说不定就藏着解决问题的关键线索呢。
比如说,它提示你某个变量没定义,嘿,那就赶紧去定义一下呀。
就好像你发现鞋带松了,赶紧系上不就完事儿啦。
要是提示你某个函数调用出错了,那你就好好检查检查那个函数的参数是不是传对啦。
有时候啊,就像衣服上沾了个小污点,你得仔细找找才能发现。
debugerror 也是这样,可能隐藏得比较深,但只要你耐心,肯定能找到它的小尾巴。
还有哦,可别一根筋地死磕。
要是自己实在搞不定,那就别不好意思,去问问身边的大神呀。
他们说不定一眼就能看出问题所在,给你指条明路。
这就跟你迷路了去问路人一样,多简单的事儿呀。
你看,处理 debugerror 其实并不难,关键是要有耐心和细心。
就像解一道谜题,只要你用心去琢磨,总能找到答案。
别把它想得太可怕,它就是个小挑战,等着你去战胜它呢!有时候,你可能会觉得怎么弄都不行,别急呀!这时候你可以先放一放,去喝杯茶,放松放松心情。
说不定等你回来的时候,灵感就突然冒出来啦,一下子就把问题解决了呢。
而且呀,每次解决一个 debugerror ,你的经验就又多了一点,下次再遇到类似的情况,你就能轻松应对啦。
这不就跟打怪升级一样嘛,越打越厉害!所以呀,朋友们,别再害怕 debugerror 啦!用我教给你们的这些方法,大胆地去和它战斗吧!相信自己,你一定可以的!。
Debug怎么解决方案引言在软件开发过程中,经常会遇到各种bug和错误,这时候就需要进行debug(调试)来定位和解决问题。
本文将介绍一些常见的debug解决方案,帮助开发者更高效地调试和解决问题。
1. 确定问题在开始debug之前,首先需要准确定位问题。
了解用户遇到的问题及如何复现可以帮助开发者更快地找到问题所在。
以下是几种确定问题的常用方法:•复现问题:尽量重现用户遇到的问题,并记录重现步骤和环境信息。
这可以帮助开发者更好地理解问题,并在相同的环境中进行调试。
•日志分析:分析应用程序的日志文件,查找错误信息和异常堆栈,以确定问题的来源。
•版本对比:对比出现问题的版本和之前正常工作的版本,查找引入问题的代码变更。
2. 使用调试工具调试工具是开发者解决问题的有力助手,可以帮助定位问题并提供更多的调试信息。
以下是常用的调试工具:•断点调试器:通过在代码中设置断点,在程序执行到断点时暂停,可以逐步调试并查看变量的值、堆栈信息等。
常用的断点调试器有GDB(C/C++)、pdb(Python)、Xcode(iOS)等。
•日志工具:可用于输出调试信息、错误日志和性能统计等。
常见的日志工具有log4j(Java)、log4net(.NET)、NSLog(Objective-C)等。
•性能分析工具:用于检测应用程序的性能瓶颈和优化建议,例如VisualVM(Java)、Instruments(iOS)。
•网络抓包工具:用于分析网络请求和响应,例如Wireshark、Fiddler 等。
可以帮助开发者定位网络相关的问题。
3. 逐步调试逐步调试是一种常用的调试方法,通过逐行或逐块执行代码,观察程序的行为和输出,以定位问题。
以下是逐步调试的步骤:1.设置断点:选择合适的位置,在代码中设置断点。
断点一般设置在问题所在的代码附近,以便观察其执行情况。
2.启动调试:运行调试模式,让程序在断点处暂停执行。
3.逐步执行:逐行或逐块执行代码,观察变量值的变化、函数调用的顺序等。
Assertionfailure:(!SetThreadContextfailed)问题的解决办法Assertion failure: "(!"SetThreadContext failed")"问题的解决办法2012-02-03 14:33:24 我来说两句收藏我要投稿在编译程序并运行后,Delphi2007会提示以下错误(windows 7 64位运行环境):---------------------------bds.exe - bordbk105N.dll---------------------------Assertion failure: "(!"SetThreadContext failed")"in ..\win32src\thread32.cpp at line 412Continue execution?---------------------------Yes No---------------------------———————华丽的分割线————————-Delphi 2007 或2009 在Windows 7 x64 以及其他x64 系统下,退出IDE 时,调试器会产生一个断言错误。
错误窗口标题为:bds.exe –bordbk120N.dll,内容为:Assertion failure: “(!”SetThreadContext failed”)”in ..\win32src\thread32.cpp at line 434。
解决办法是使用一个非官方的补丁程序进行修复。
补丁程序来源:/blog/index.php/2009/07/delphi-2009-windows-7-64-bit-debugger-crash-workaround/Delphi 2009 / Windows 7 / 64 bit Debugger Crash WorkaroundDelphi 2009 / Windows 7 / 64 bit Debugger Crash WorkaroundYesterday I revisited a nasty problem that occurs on Windows 64bit versions. I ran into that when I upgraded to Windows 7, but it seems it affects older 64bit editions of Windows as well.After installing D2009 on a clean Win7 machine I was happy to see that Windows 7 really is what Vista should have been. It works snappy and has a lot of productivity features. But then when I started compiling and debugging a couple of my existing Delphi applications I experienced Debugger crashes almosteverytime when I terminated an application.Unfortunately no matter if you press “Yes” or “No” on that screen – you have to restart the whole Delphi IDE – which basically makes debugging impossible. In some (actually many) cases you even have to terminate Delphi using Windows TaskManager. I tried all of the compatibility settings Win7 offers, as well as running Delphi as Administrator – but no luck.Some research on Google, QC and RAID showed that similar exceptions were reported with older Delphi versions, but apparently only on 64bit Windows editions. As the message already suggests, the problem appears to be an invalid call to a SetThreadContext API call. Some tests showed that you can easily reproduce this issue once you have more that just a single thread in your Delphi application. As you might know, I am doing quite a lot of Web application server development – which by nature create many threads…I created a RAID entry for that (actually an existing one was updated with detailed reproduction steps –iirc) and joined a discussion thread on that topic to see if others are reporting that too. Because of time constraints I did not revisit that issue over the last couple of weeks, but yesterday when I was talking to Daniel Magin, we together found a solution someone had posted on a German Forum a few weeks ago. The original idea is from an MS TechNet posting though (credits go to a guy called XelaxAx).He posted a workaround that basically disables the check for a possible error returned by SetThreadContext, i.e. the debugger ignores the error and does not crash because of the Assert that checks fro no error returned. As Andreas Hausladen already correctly mentioned, this is really just kind of a weak workaround, because the debugger might misbehave after that and we just do not know why SetThreadContext fails at all. The point is though that with this fix I can work effectively again with D2009 on Win7/64bit and as this error only happens when the debugger is about to shout down anyway, so the danger of unwanted side effects is not too high imho.Be careful! No waranties! I am not responsible for lost files etc.! Back up first!Workaround steps:Close DelphiLocate bordbk120N.dll (C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin)Make a backup copyCheck step 3Open bordbk120N.dll in a Hex editor (UltraEdit works fine) Search for “01 00 48 74 47 80 3D”Make sure this is found once onlyReplace “74” with “EB”SaveRestart Delphi. Error should be gone.This might work on older Delphi versions as well, but I did not test that yet.Update 1I talked to some CodeGear Q&A guy and he tested their current internal Weaver build under the conditions where D2009 fails. The good news is that the error seems to be gone there –so the next Delphi Version will probably be good. For those who want to get started now: please see Update 2 below.Update 2LordByte sent me his automatic patch tool for Delphi 2007 and Delphi 2009. Just click “Apply patch” and you are done.Get the patcherhere: Delphi_2007_2009_WOW64_Debugger_Fix.zip (169 KB)Note: Provided as is for free. Use at your own risk.摘自冷月宫主的专栏。
用 VC6 的 MFC AppWizard 生成的窗口程序,窗口标题或者标签用中文,编译执行发现中文成乱码了,奇怪,以前怎么没有出现这种问题呢?在网上找找资料才知道,原来我现在用的是非中文 XP 操作系统,在用向导生成窗口程序的过程中,没有中文语言的选项。
不知道为什么,我的操作系统的区域都是设置成的中国,语言也是设成的简体中体,都没错的,VC6 安装程序看我的界面不是中文就不给我装上中文语言支持的动态库。
解决办法是:可以在VC6 安装光盘中找到APPWZCHS.DLL 文件(也点击6.0.8168.0__APPWZCHS.zip 可从此处下载),拷入到 C:/Program Files/Microsoft Visual Studio/COMMON/MSDev98/Bin/IDE,确切位置视你的 Visual Studio 安装目录而定。
这样重新用 MFC AppWizard 建一个工程,在第一步就可以选上简体中文了,在程序中的界面上写中文,然后执行就没问题了。
如果你的工程中的菜单、对话框、字符串等资源不是由AppWizard生成的,而是手工添加的,你必须保证该资源的Language选项为Chinese(P.R.C)还有一个解决方案是:不需要 APPWZCHS.DLL文件,找到工程中的 rc 文件(资源文件),把其中LANGUAGE 9, 1的地方改为4,2;codepage(1252)改为codepage(936);另外把#include "afxres.rc" 改成#include "l.chs/afxres.rc";把"afxres.rc" 改成"l.chs//afxres.rc"即可,其中的数据根据不同文字代码可能不同,例子中的是英文,改为中文。
改 rc 文件的办法我试过,改过之后虽然执行时界面显示中文都没有问题,可是程序响应按钮操作的时候却出现了Debug Assertion Failed! _CrtIsValidHeapPointer(pUserData)......非常致命的错误,可能这跟修改 rc 文件是无关的。
代码调试中的常见错误与解决方法代码调试是软件开发过程中不可或缺的一环。
通过调试,开发人员能够找出程序中存在的错误并进行修复,确保程序的正常运行。
然而,调试过程中常常会遇到一些常见的错误。
本文将介绍一些常见的调试错误,并提供相应的解决方法,帮助开发人员快速解决问题。
1. 语法错误语法错误是最常见的错误之一,通常是由于代码中的拼写错误、缺少分号或者括号不匹配等导致的。
在调试过程中,编译器会给出相应的错误提示。
解决方法:- 仔细检查代码,在有错误提示的行进行排查,查看是否有拼写错误、缺少分号等。
- 使用编译器或者集成开发环境(IDE)的语法检查工具,帮助找出语法错误并进行修复。
2. 逻辑错误逻辑错误是指代码的执行结果与预期结果不符合。
这类错误通常由于对程序逻辑的理解不准确或者数据处理错误导致的。
解决方法:- 使用调试工具,在关键的代码处设置断点,并逐步执行代码,观察变量的值是否符合预期。
- 使用日志输出,将关键变量的值输出到日志文件中,以便查看程序执行过程中的数据变化。
- 使用单元测试,编写测试用例来验证程序的逻辑,以便及早发现错误并进行修复。
3. 内存错误内存错误是指程序在使用内存时出现的问题,比如内存泄漏、访问越界等。
这类错误通常会导致程序崩溃或者产生意料之外的结果。
解决方法:- 使用内存调试工具,如Valgrind等,检查程序的内存使用情况,找出内存泄漏或者越界访问的问题。
- 仔细检查代码,查看是否有未释放的内存或者越界访问的情况,并进行修复。
4. 硬件相关错误在某些情况下,代码调试中出现的错误可能与硬件相关。
比如网络连接错误、设备驱动问题等。
解决方法:- 检查硬件设备的连接情况,确保硬件正常工作。
- 检查硬件驱动是否正确安装,更新驱动程序以解决兼容性问题。
- 使用网络调试工具,如Wireshark等,来检查网络连接和数据传输情况。
5. 并发错误并发错误是多线程或多进程程序中常见的问题。
这类错误通常是由于竞争条件、死锁或者资源争夺等引起的。
VC程序调试VC程序调试调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
一、VC程序调试方法 VC的调试功能:首先,再次强调要用Go命令运行一个将要调试的程序;如果要中止调试状态下的运行程序可以点击Stop Debugging命令,还可以通过Break选项以可恢复方式中断调试程序的运行流程(用Restart选项可以重新开始运行程序);Step Into选项表示每次只执行一行语句(单步执行),但如果当前代码是调用一个函数,那么Step Into表示进入该函数,全部函数语句执行完后返回,而Step Over则是跳出这个函数;Step To Cursor 选项表示程序将执行到光标所在的可执行语句行上;在调试多线程程序时,可以在线程函数或主应用程序线程中设置断点,还可以用Break选项结束线程后用Threads选项查看运行线程列表,也可以选择悬挂和恢复每个线程;在设置断点后,在VC "查看"菜单的"调试窗口"中可以查看变量、内存、调用堆栈、寄存器以及反汇编语句。
在程序中设置断点的方法是,点击要设置的代码行并点击设置代码的工具栏按钮,会出现在代码行最左边的一个小黑点即是断点标志,这时再选Go 程序会在执行到端点处停下来,如果要继续执行可以再选Go。
通过选择VC"工具"菜单下的"源浏览器"可以生成一个.BSC文件,使用浏览器可以从中发现多种信息:程序中任何一个变量、函数、类或宏在何处定义及引用;可以列出所有声明的函数类、变量、宏;可以发现调用一个指定函数的所有函数;可以找到一个指定类的派生来源或者它派生出哪些类。
在使用微软程序开发库MSDN时,我们会发现其中的VC示例经常采用看似多余的ASSERT语句,其作用就是使程序具有"维护"性。
关于VC编译错误fatal error C1083的解决办法这时因为该模块没有包括预编译头文件“stdafx.h”的缘故。
VC用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在Debug目录下有一个很大的文件*.pch,这里就存储了预编译信息。
根据这个原理,如果这个pch损坏了或被删除了,系统重新编译时就会抱怨“cannot openprecompiled header file debug/*.pch”。
这时怎么解决这个问题呢,打开Project-》Setting对话框选C++页,将Category下拉式列表框选中Precompiled Headers,最简单的办法就是选中第一个选项“Not using....",这样就根本不用预编译头也不去寻找pch文件,就不会出错了,但是这样做的后果是每次编译、连接都化更多的时间。
第二个选项”Automatic ...",然后在“Through header”力填上stdafx.h,这样如果没有pch文件系统会自动生成一个pch,如果有的话就使用这个pch,这个选项是比较“智能”的。
第三个选项是强行创建一个pch文件,第四个选项是直接使用pch文件。
当然“Throughheaders”里都填stdafx.h了。
1.nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argvnafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argcnafxcwd.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctypenafxcwd.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctypenafxcwd.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype解决办法:PROJECT->SETING->C/C++->PREPROCESSOR->定义 _AFXDLL,完毕。
MAPGIS二次开发基础知识一、手动注册组件与注销组件COM以及客户应用程序所需的、用来定位组件及对组件进行实例化的信息存储在Windows的注册表(Registry)里。
因此,在使用组件之前要对组件进行注册,只有成功注册才能引用该组件,其具体步骤为:1.将包容组件的DLL文件放入MAPGIS PROGRAM目录下,假设物理路径为:D:\mapgis65\program\MapGisBasCom1.dll2.运行注册表程序注册组件Windows开始菜单-〉运行:regsvr32D:\mapgis65\program\MapGisBasCom1.dll注册成功与否将有对话框弹出。
3.注销该组件方法为:regsvr32/u D:\mapgis65\program\MapGisBasCom1.dll二、Visual Basic中嵌入对象类型库为了使Visual Basic能够访问MAPGIS对象定义,应该在Visuai Basic项目或模块中嵌入MAPGIS对象类型库。
如果想把一个Visual Basic对象声明为MAPGIS对象类型,要求嵌入MAPGIS对象类型库,如果想把一个Visual Basic对象声明为一般Object类型,就不必嵌入MAPGIS对象。
为了在项目中嵌入MAPGIS对象类型库,通常执行这些步骤:从Project(工程)菜单,选择References,References对话框出现,选中复选框嵌入MapGisBasCom1Type Library文件。
这要求VisualBasic环境或代码模块编辑器是活动的,正在运行。
三、使用MAPGIS对象可以使用Visual Basic编写使用MAPGIS对象的程序。
在Visual Basic程序中使用MAPGIS 对象所要求的步骤是:1.嵌入MAPGIS对象类型库。
2.建立一个MAPGIS对象。
3.使用MAPGIS对象和包含的其他对象。
4.释放MAPGIS对象。
debug怎么解决方案在软件开发的过程中,往往难免会遇到各种各样的bug。
这些bug可能导致程序崩溃、功能失效,甚至引发数据丢失等严重后果。
在解决这些bug的过程中,debug成为了程序员日常工作中必不可少的一环。
本文将探讨debug的一些解决方案,帮助程序员更有效地解决bug。
1. 了解问题首先,要解决一个bug,你需要全面了解问题的本质。
这意味着你需要读懂报错信息,分析代码逻辑,找出潜在的问题所在。
有时候,一个看似微小的错误可能隐藏着更深层次的问题。
因此,不要急于找解决方案,而是要花时间仔细分析问题。
2. 分析代码在找到问题的大致方向后,下一步是分析代码。
你可以使用调试器工具,逐行查看代码执行过程,观察变量的值变化和函数调用的顺序。
这有助于你找到代码中的瑕疵,并定位到具体的错误发生点。
3. 添加日志有时候,bug的解决并不是那么直观。
这时,你可以通过添加日志语句来帮助定位问题。
日志可以记录程序执行过程中的关键信息,帮助你了解程序的内部状态。
通过观察日志输出,你可以更容易地跟踪代码的执行情况,找出问题所在。
4. 编写单元测试单元测试是一种有效的debug手段。
通过编写单元测试,你可以在开发过程中模拟各种情况,测试代码的各个部分。
当你发现某个测试用例失败时,就能快速判断出问题所在,然后修复bug。
同时,单元测试也是一种预防bug的手段,通过及时发现问题,减少bug的出现。
5. 团队合作在大型项目中,debug往往不是一个人独立完成的任务。
团队合作是解决bug的重要方式之一。
团队成员可以互相协作,共同分析问题,提供不同的思路和解决方案。
通过集思广益,可以更快地找到解决方案,并保持高效的开发进度。
6. 查看文档和社区当你遇到困难时,不要忘记查阅文档和参与开发者社区的讨论。
文档通常提供了许多关于特定工具和框架的技术细节和常见问题的解决方法。
此外,开发者社区中有着众多经验丰富的开发者,他们可能已经遇到了类似的问题并找到了解决方案。
代码调试中的常见错误与解决方法在编写和调试代码的过程中,很容易遇到各种错误和问题。
这些错误可能会导致代码无法正常运行或产生不正确的结果。
本文将介绍一些常见的代码调试错误以及相应的解决方法,以帮助程序员更有效地解决问题。
1. 语法错误语法错误是最常见的问题之一。
它们通常是由拼写错误、缺少或多余的标点符号、未闭合的括号或引号等造成的。
在调试过程中,代码编辑器通常会标记出这些错误,帮助我们快速找到问题所在。
解决方法:- 仔细阅读代码,检查拼写和标点符号是否正确。
- 确保所有的括号和引号都是成对出现的,并且正确地闭合。
- 可以使用代码编辑器的自动格式化功能,帮助我们检查和修复一些常见的语法错误。
2. 逻辑错误逻辑错误会导致代码在运行时产生不正确的结果。
这些错误可能是由于错误的条件判断、错误的算法或逻辑流程造成的。
逻辑错误通常不会被代码编辑器标记出来,因此要找到并修复这些错误可能需要更多的时间和耐心。
解决方法:- 使用调试器(debugger)逐行执行代码,并观察程序的行为,以找到错误所在。
- 根据程序的预期输出和实际输出进行对比,分析可能的错误原因。
- 使用日志输出或打印语句来跟踪程序的执行流程,帮助找出错误出现的位置。
3. 数组越界错误数组越界错误是指访问数组中不存在的索引,或者访问超出数组范围的索引。
这种错误通常会导致程序崩溃或产生不可预知的结果。
解决方法:- 仔细检查数组的大小和索引的范围,确保不会越界访问。
- 在访问数组元素之前,始终检查索引是否有效。
- 使用循环结构来遍历数组,确保循环条件不会导致数组越界。
4. 空指针错误空指针错误是指在访问或操作空指针(null)时发生的错误。
这种错误通常是由于未经过初始化的指针、未分配内存空间或者引用已被释放的对象而导致的。
解决方法:- 在使用指针之前,始终确保指针已被正确初始化,并分配了合适的内存空间。
- 使用条件判断语句来检查指针是否为空,避免在空指针上进行操作。
西安理工大学卢江涛
经典解决问题:
关于UpdateData(FALSE)的运用,UpdateData(FALSE)函数用来更新edit控件中的内容,但是UpdateData(FALSE)函数有一个弊端,就是在主窗口主线程程中用是没有问题的,但是一旦在非主线程(比如工作线程或者子线程)中使用,就会产生Debug Assertion Failed的错误,这个错误为线程冲突错误,是UpdateData(FALSE)函数在非主线程中使用经常产生的错误,当然这个错误是Debug环境下会产生的错误,在release环境下会忽略,下面就介绍一下如何在Debug环境下解决此类错误:
比如我们新建了一个名为winsockserver的MFC工程,该工程作用是担当有连接网络通信的服务器端,则解决错误步骤为
1.在winsockserverDlg.h头文件中加入如下红色字体语句
#if !defined(AFX_WINSOCKSERVERDLG_H__0AB5CD32_7C63_41B0_AB27_7ACBA 754BDBA__INCLUDED_)
#define
AFX_WINSOCKSERVERDLG_H__0AB5CD32_7C63_41B0_AB27_7ACBA754BDBA__ INCLUDED_
#define WM_UPDATEDA TA WM_USER+1
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
还有如下红色字体语句:
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CWinsockserverDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButton1();
afx_msg void OnButton3();
afx_msg LRESULT OnUpdateData(WPARAM wParam,LPARAM IParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
2.用消息映射的方法将原本在非主线程中的UpdateData(FALSE)放到主线
程中去,在winsockserverDlg.cpp程序文件的消息映射中加入红色字体所
示
BEGIN_MESSAGE_MAP(CWinsockserverDlg, CDialog)
//{{AFX_MSG_MAP(CWinsockserverDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_MESSAGE(WM_UPDATEDATA,OnUpdateData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3.将UpdateData(FALSE)放到主线程中去是以函数的形式存在的,在
winsockserverDlg.cpp程序文件中加入如下红色字体所示
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
LRESULT CWinsockserverDlg::OnUpdateData(WPARAM wParam,LPARAM IParam)
{
UpdateData(FALSE);
return 0;
}
4.在子线程中要进行edit控件的更新,则只需向主线程发送消息即可,在
winsockserverDlg.cpp程序文件中加入如下红色字体所示
UINT ReceiveMessage(LPVOID pParam)
{
CWinsockserverDlg * c = (CWinsockserverDlg *) pParam;
char buffer[1024];
int error;//记录recv函数返回值,即接收的字节数,也作异常代码
AfxMessageBox("循环开始啦!");
while( error = recv(c->toClient, buffer, 1024, 0))
{
if(error == 0 || error == SOCKET_ERROR)break;
c->m_chat += "Client:";
c->m_chat += buffer;
c->m_chat += "\r\n";
c->SendMessage(WM_UPDATEDATA,0,0);
}
return 0;
}
经过上述4个步骤,即可实现UpdateData(FALSE)函数在非主线程中的灵活运用而不再报Debug Assertion Failed错误。