MTVERIFY】的更多相关文章

MTVERIFY宏即适用于GUI程序也适用于console程序,这个宏内部其实是记录并解释了Win32 GetLastError()的结果.如果Win32函数失败,MTVERIFY()会打印出一段简短的文字说明,在多线程编程时检查错误效果尤为突出, 现在我写在这里,供大家参考 使用时注意在头文件中加入:#include <MtVerify.h> 然后在程序中用MTVERIFY()括号括住关于线程句柄的代码,这样线程出了问题,错误就会有MTVERIFY负责显示. #pragma comment(…
api调用错误诊断宏,对GetLastError()函数的封装,并解析错误 从网上找的版本并进行了部分修改 /* * MtVerify.h * * The function PrintError() is marked as __inline so that it can be * included from one or more C or C++ files without multiple definition * errors. * To use the PrintError() in…
#include <windows.h>  //windodws变量相关头文件 MtVerify.h的内容如下:#pragma comment( lib, "USER32" )     #include <stdlib.h>     #include <crtdbg.h>     #define MTASSERT(a) _ASSERTE(a)     // 宏定义 __FILE__ 与__LINE__都是预处理符号提供错误信息的描述     // 如…
使用overlapped I/O并搭配event对象-----win32多线程-异步(asynchronous) I/O事例,会产生两个基础性问题. 第一个问题是,使用WaitForMultipleObjects(),你只能等待最多达MAXIMUM_WAIT_OBJECTS个对象,在Windows NT中此值最大为64. 第二个问题是,你必须不断根据“那一个handle被激发”而计算如何反应.你必须有一个分派表格(dispatch table)和WaitForMultipleObjects()的…
以文件 handle 作为激发机制,有一个明显的限制,那就是没办法说出到底是哪一个 overlapped 操作完成了.如果每个文件 handle 只有一个操作等待决定,上述问题其实并不成为问题.但是如我稍早所说,系统有可能同时接受数个操作,而它们都使用同一个文件 handle.于是很明显地,为每一个可能正在进行中的 overlapped 操作调用 GetOverlappedResult(),并不是很有效率的做法.毫不令人惊讶,Win32 提供了一个比较好的做法,用以解决这样的问题.    OVE…
干净的终止一个线程  我曾经在第2章产生一个后台线程,用以输出一张屏幕外的 bitmap 图.我们必须解决的一个最复杂的问题就是,如果用户企图结束程序,而这张bitmap 图尚未完成,怎么办?第2章的一个鸵鸟做法就是在任何 worker 线程还没完成其工作之前,不准用户结束程序.只要修改主消息循环,使消息循环不得在任何一个 worker 线程尚未结束之前结束,即可办到.这种做法的最大优点就是"简单",但万一 bitmap 图十分复杂,需要很长的工作时间,那么程序有可能看起来像是&quo…
互斥器的功能是,使多个线程和谐工作.同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程就会进入blocking(阻塞)状态,直到Mutex让出来. 总结下Mutex的操作步骤,分为以下几个功能: 1. 产生一个全局互斥器Mutex(一个Mutex可以看做一个资源,如果要多个资源,则需要创建多个Mutex句柄): 2. 锁住互斥器Mutex:获得一个Mutex的拥有权,其他线程只能等待…
I/O设备是个慢速设备,无论打印机.调制解调器,甚至硬盘,与CPU相比都奇慢无比,坐下来干等I/O的完成是一件不甚明智事情. 异步(asynchronous) I/O在win32多线程程序设计中被称为overlapped I/O,是win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你.这项技术使你的程序在I/O进行过程中仍然能够继续处理事务.事实上,操作系统内部正是以多线程完成overlapped I/O,你可以获得线程的所有利益,而不需要付出什么痛苦代价. 异步(asy…
第一篇初步了解串口的大致运作,接下来我们看基本操作 先看串口操作的数据结构: 串口操作有几个比较重要的Struct 1.Overlapped I/O 异步I/O模型 异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制.异步I/O,调用一个函数告诉OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你.Overlapped I/O只是一种模型,它可以由内核对象(hand),事件内核对象(hEvent), 异步过程调…
随笔 - 262  文章 - 0  评论 - 531  博客园  首页  新随笔  联系  管理  订阅  Overlapped I/O模型深入分析(转) 简述:    Overlapped I/O也称Asynchronous  I/O,异步I/O模型.异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制.异步I/O,调用一个函数告诉 OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你.Overlapped I…
使用system函数调用系统命令"md" 注意:字符串变量的话赋值时要使用双斜杠"\\": system("md C:\\newfolder\\"); 如果需要动态新建目录的话: char *path = "C:\\newfolder\\"; char swap[255]; sprintf(swap, "md %s", path); system(swap); 不用判断返回值,系统会自动将错误信息打印到标准…
windows下的两个等待技术 第一种: Win32  Sleep()函数      这个函数要求操作系统中止线程动作.直到读过某个指定的时间之后才恢复.能在某个线程结束时(而不是某段时间结束时)被调用. 另外一种:busy  loop(busy waits)      不断调用GetExitCodeThread(),直到其结果不再是STILL_ACTIVE. 缺点:浪费CPU时间. 绝对不要在Win32中使用busy loop //busywait.c /*Domonstrate the ef…
THRDTERM产生两个线程.周期性地检查一个event对象.以决定要不要结束自己. #define WIN32_LEAN_AND_MEAN #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include "MtVerify.h" DWORD WINAPI ThreadFunc(LPVOID); HANDLE hRequestExitEv…