window编程
xiaofengsheng
这个作者很懒,什么都没留下…
展开
-
windows via c/c++ 学习笔记(一)
以前从第一章看到第七章,没注意做笔记,如今拾起,已忘得差不多了,所以趁暑假时间充裕,决心做好笔记,以备同志们和我自己学习查阅.因此,本学习笔记从第八章开始写起......(一) 用户模式下的线程同步 同步方法一: Interlocked系列函数 同步方法二: 应避免的方法volatile BOOL g_fFinishedCalculation = FALSE;int W原创 2009-07-15 22:06:00 · 563 阅读 · 0 评论 -
程序员的自我修养: 静态链接的过程
1. 空间与地址分配是一个相似段合并的过程。step one,空间与地址分配step two,符号解析与重定位//a.cextern int shared;int main(){ int a = 100; swap(&a, &shared);}//b.cint shared = 1;void swap(int* a, int* b){原创 2010-03-06 16:40:00 · 808 阅读 · 0 评论 -
程序员的自我修养: 目标文件的本质
目标文件的格式Windows下为PE(Portable Executalbe),Linux为ELF(Executable Linkable Format), 他们都是COFF的变种. 下面都是以ELF格式文件为例.ELF文件类型分为:可重定位文件(Relocatable File) Linux的.o, windows的.obj可执行文件(Executable Fi原创 2010-03-06 09:13:00 · 771 阅读 · 0 评论 -
程序员的自我修养: 函数调用与堆栈
内存布局linux下一个进程的典型内存分布:____________________ 0xffffffffkernel space ____________________ 0xc0000000stack(向下拓展)____________________unused____________________dy原创 2010-03-09 21:30:00 · 1239 阅读 · 1 评论 -
程序员的自我修养: 运行库与多线程
运行库与多线程线程私有的有:局部变量函数的参数TLS数据 线程之间共享(进程所有):全局变量堆上的数据函数里的静态变量程序代码, 任何线程都有权利读取并执行任何代码打开文件,A线程打开的文件可以由B线程读写 单线程的CRT有很多函数出问题:1. errno: 多个线程都可以修改2. strtok(): 有静态变量3. malloc/n原创 2010-03-11 00:38:00 · 653 阅读 · 0 评论 -
程序员的自我修养: 全局构造/析构函数是怎样调用的?
全局构造/析构函数与C/C++运行库主要以MSVC CRT来说:大致的过程如下:mainCRTStartup(){ ... _initterm(__xc_a, __xc_z);}typedef void (__cdecl * _PVFV)();static void __cdecl _initterm(_PVFV* pfbegin, _PVFV* pfe原创 2010-03-11 10:50:00 · 1633 阅读 · 0 评论 -
程序员的自我修养: fread-C语言是怎样读取文件的
为了效率的考虑,不至于频繁调用系统函数和访问IO设备,MSVC CRT的fread采用缓冲设计. C语言提供的关于缓冲的函数有:int flush(FILE* stream);int setvbuf(FILE* stream, char* buf, int mode, size_t size);/*缓冲模式mode有:1. 无缓冲模式 _IONBF2. 行缓原创 2010-03-11 19:19:00 · 5545 阅读 · 0 评论 -
[转]: 静态链接库, 动态链接库, DLL文件 与 LIB文件
一、 静态链接库与动态链接库区别静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链原创 2010-03-12 13:41:00 · 782 阅读 · 0 评论 -
程序员的自我修养: 程序运行的基石-C/C++运行库
一个C语言运行库大致包含了如下功能:1. 启动与退出: 包括入口函数及入口函数所依赖的其它函数等2. 标准函数: 由C语言标准规定的C语言标准库所拥有的函数实现.3. I/O: IO功能的封装和实现4. 堆:堆的封装和实现5. 语言实现: 语言中一些特殊功能的实现.6. 调试: 实现调试功能的代码. 在这些运行库的组成成分中, C语言标准占据了主要并且大有来头.原创 2010-03-10 21:26:00 · 879 阅读 · 0 评论 -
[转]TLS: 线程局部存储TLS
线程局部存储TLS 堆栈中定义的局部变量,对多线程是安全的,因为不同的线程有自己的堆栈。而通常定义的全局变量,所有线程都可以作读写访问,这样它就不是线程安全的,为安全就有必要加锁互斥访问。而何为线程局部存储(TLS),简单的说,就是一个变量(通常是指针,指向具体的类型),每个线程都有一个副本,而在程序中可以按照相同的方式来访问,(比如使用相同的变量名,又或者都调用TlsGetValue),转载 2010-03-11 10:16:00 · 877 阅读 · 0 评论 -
程序员的自我修养: Windows下的动态链接
一 DLLWindows下的DLL文件和exe文件实际上是一个概念,他们都是有PE格式的二进制文件,有些不同的是:PE文件头部中有个符号位表示该文件是EXE或是DLL.每个进程有一份私有的数据副本, 由于在ELF文件中, 代码段是地址无关的, 所以可以在多个进程之间共享一份代码. 但是DLL的代码并不是地址无关的, 所以他只是在某种情况下可以被多个进程间共享. 1. DLL共享数据原创 2010-03-08 13:01:00 · 1888 阅读 · 0 评论 -
程序员的自我修养: PE文件
_____________________________________Image DOS Header IMAGE_DOS_HEADER_____________________________________ Image DOS Stub_____________________________________ PE File He原创 2010-03-06 22:29:00 · 703 阅读 · 0 评论 -
wchar_t 与 char的转换
Converts a sequence of wide characters to a corresponding sequence of multibyte characters. More secure versions of these functions are available; see wcstombs_s, _wcstombs_s_l. size_t wcstombs(原创 2009-05-27 20:56:00 · 899 阅读 · 0 评论 -
windows消息分流器
对于熟悉Win API编程的同志们来说,windowsx.h这个头文件应该不会太陌生吧,这次要讲的内容就来自这个windowsx.h头文件。 经常能在msdn上查到这样一些函数,明明是个函数,而且模样长得和一般的api函数也一样一样的,可却叫做macro,为什么呢?留意一下函数使用的requirement,你会发现,它的声明正是在windowsx.h这个头文件里。Windowsx.转载 2009-06-04 13:21:00 · 595 阅读 · 0 评论 -
跨进程边界共享内核的方法
跨进程边界共享内核的方法:1 使用对象句柄继承typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle;} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_原创 2009-06-06 01:41:00 · 782 阅读 · 0 评论 -
windows via c/c++ 学习笔记(二) 内核同步
内核事件对象:有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。M i c r o s o f t为自动重置的事件定义了应该成功等待的副作用规则,即当线程成功地等待到该对象时,自动重置的事件就会自动重置到未通知状态。这就是自动重置原创 2009-09-03 21:39:00 · 575 阅读 · 0 评论 -
windows via c/c++ 学习笔记(三) 线程池
3.当单个内核对象变为已通知状态时调用函数:如果想在内核对象得到通知时注册一个要执行的工作项目,可以使用另一个新的线程池函数:BOOL RegisterWaitForSingleObject( PHANDLE phNewWaitObject, HANDLE hObject, WAITORTIMERCALLBACK pfnCallback, PVOID pvContext,原创 2009-09-03 21:41:00 · 857 阅读 · 0 评论 -
[转]VC: MultiByteToWideChar和WideCharToMultiByte用法
//========================================================================//TITLE:// MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR:// norains//DATE:// 第一版:Monday 25-December -2006//转载 2009-09-15 17:21:00 · 3293 阅读 · 0 评论 -
程序员的自我修养: 各种线程安全有关的锁的区别
二元信号量(Binary Semaphore):最简单的一种锁, 只有两种状态: 占用与非占用.它适合只能被唯一一个线程独占访问的资源. 信号量(Semaphore):允许多个线程并发访问的资源. 互斥量(Mutex):资源仅同时允许一个线程访问. 但和信号量不同的是, 信号量在整个系统可以被原创 2010-03-04 17:22:00 · 792 阅读 · 0 评论 -
程序员的自我修养: 可执行文件的装载
进程虚拟地址空间Linux中,4GB的分配如下:————————————————Operating System____________________________ 0xC000000(1GB)User Process———————————————— 0x00000000(4GB原创 2010-03-07 10:49:00 · 816 阅读 · 0 评论 -
程序员的自我修养: 动态链接
为什么要动态链接动态链接可以节省内存和磁盘空间,便于程序的开发和发布。动态链接是把链接这个过程从本来的程序装载前被推迟到了装载的时候。动态链接文件的最终装载地址在编译时是不确定的。 地址无关代码固定装载地址产生干扰装载时重定位:进行基址重置(Rebasing) 但是由于装载时重定位的方法需要修改指令,没有办法做到同一份指令被多个进程共享,因为指令原创 2010-03-07 15:20:00 · 745 阅读 · 0 评论 -
程序员的自我修养: 系统调用的原理
一 特权级与中断用户模式(user mode)和内核模式(kernel mode),也被称为用户态和内核态.操作系统一般是通过中断来从用户态切换到内核态. 一般的过程如下:User Mode execution -----+ Interruption occured Next instruction原创 2010-03-11 20:55:00 · 1458 阅读 · 0 评论