window核心编程(小结)

1.C r e a t e T h r e a d函数是用来创建线程的Wi n d o w s函数。不过,如果你正在编写C / C + +代码,决不应该调用C r e a t e T h r e a d。相反,应该使用Visual C++运行期库函数_ b e g i n t h r e a d e x.原因比较简单,操作系统并不知道每种语言对堆栈空间的管理,调用CPP的_ b e g i n t h r e a d e x函数会调用CreateThread函数创建线程,

2.应该考虑的第一件事情是,“为什么必须将一个库用于单线程应用程序,而将另一个库用于多线程应用程序?”。原因是:运行期库的发明者没有考虑到将C运行期库用于多线程应用程序

3.创建这两个函数的目的是用来执行_ b e g i n t h r e a d e x和_ e n d t h r e a d e x函数的功能。但是,如你所见,_ b e g i n t h r e a d函数的参数比较少,因此比特性全面的_ b e g i n t h r e a d e x函数受到更大的限制
3.ResumeThread 运行和挂起进程
SuspendThread

4.SuspendProcess暂停进程中所有线程

5.可以将0传递给S l e e p。这将告诉系统,调用线程将释放剩余的时间片,并迫使系统调度另一个线程。但是,系统可以对刚刚调用S l e e p的线程重新调度

6.Wi n d o w s提供了一个称为G e t T h r e a d Ti m e s的函数 获得线程运行时间

7.原子操作 : InterlockedExchangeAdd

8.Wi n d o w s确实提供了其他一些方法,以便在进程之间进行数据通信,但是这些方法都是使用内存映射文件来实现的,这使得内存映射文件成为单个计算机上的多个进程互相进行通信的最有效的方法。注意一下了,内存映射应当是目前单机上进程间通讯最有效的方法了 下面是内存映射的主要方法:

若要使用内存映射文件,必须执行下列操作步骤:

1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。

2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。

3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。

当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:

1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。

2) 关闭文件映射内核对象。

3) 关闭文件内核对象

注意一点是:如果调用C r e a t e F i l e M a p p i n g函数,传递PA G E _ R E A D W R I T E标志,那么系统将设法确保磁盘上的相关数据文件的大小至少与d w M a x i m u m S i z e H i g h和
d w M a x i m u m S i z e L o w参数中设定的大小相同。如果该文件小于设定的大小, C r e a t e F i l e M a p p i n g函数将扩展该文件的大小,使磁盘上的文件变大。这种扩展是必要的,这样,当以后将该文件作为内存映射文件使用时,物理存储器就已经存在了。这样可可以提高大文件操作的效率。

如果互相进行通信的所有进程都在同一台计算机上的话,上面提到的所有机制均使用内存映射文件从事它们的烦琐工作。如果要求达到较高的性能和较小的开销,内存映射文件是举手可得的最佳机制。方法如下:
static HANDLE s_hFileMap = NULL;
s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
            PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData")); 这里的MMFSharedData就进程间共享数据的标识了

9.


你可能感兴趣的:(window核心编程(小结))