一句话
来源:互联网 发布:淘宝二级域名有什么用 编辑:程序博客网 时间:2024/04/30 13:02
今天在《Win32多线程程序程序设计》中看到一些原则性的东西:
1、在线程之间尽量保持最小接触面积;
2、将 race conditions 的可能性降到最低;
3、程序代码要有自我防卫意识。
这些东西还待进一步研究实践,不过在里面学到了MTVERIFY宏来处理调试多线程程序,这个很不错,值得学习,贴出来给大家看看:
#pragma comment( lib, "USER32" )#include <crtdbg.h>#ifdef DEBUG#define MTASSERT(a) _ASSERTE(a)#define MTVERIFY(a) if (!(a)) PrintError(#a,__FILE__,__LINE__,GetLastError())#else#define MTASSERT(a) (a)#define MTVERIFY(a) (a)#endif__inline void PrintError(LPTSTR linedesc, LPTSTR filename, int lineno, DWORD errnum){LPTSTR lpBuffer;TCHAR errbuf[256];#ifdef _WINDOWS_TCHAR modulename[MAX_PATH];#elseDWORD numread;#endifFormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,errnum,LANG_NEUTRAL,(LPTSTR)&lpBuffer,0,NULL);wsprintf(errbuf, "\nThe following call failed at line %d in %s:\n\n %s\n\nReason: %s\n", lineno, filename, linedesc, lpBuffer);#ifndef _WINDOWS_WriteFile(GetStdHandle(STD_ERROR_HANDLE), errbuf, strlen(errbuf), &numread, FALSE );Sleep(3000);#elseGetModuleFileName(NULL, modulename, MAX_PATH);MessageBox(NULL, errbuf, modulename, MB_ICONWARNING|MB_OK|MB_TASKMODAL|MB_SETFOREGROUND);#endifLocalFree(lpBuffer);exit(EXIT_FAILURE);}
每次使用的时候,直接套在你要调试我的函数外面就可了,比如,我要调试建立线程这个函数,就可以这么写:
MTVERIFY( ThreadH[ i ] = CreateThread( 0,0,ThreadFunc,( LPVOID )i, 0, &ThreadId ) );
这样就可以很方便的调试多线程程序了。
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- 一句话
- node.js 入门
- .net jMail邮件发送(含抄送、密送、多发、日志记录)
- 持续集成平台构建
- 出现次数为某个特定值的问题归类
- opencv学习-imgprocess-判断点是否在轮廓内pointPolygonTest
- 一句话
- 使用xrdp实现windows 远程桌面 ubuntu linux
- MyEclipse取消验证Js的两种途径.
- IOS学习笔记-概述
- java学习之路-------try....catch....让你想不到的结果
- "蓝屏"和"绿屏"CG技术
- 简单实用的网游服务器架构
- jquery获取控件的绝对位置
- SunOS 5.10 sparc C/C++ 初学者之动态链接库