- 博客(16)
- 资源 (3)
- 收藏
- 关注
原创 17.2匿名管道
17.2匿名管道17.2.1基础知识//匿名管道是一个未命名的、单向管道,通常用在一个父进程和一个子进程之间传输数据。匿名管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。为创建匿名管道,需要调用CreatePipe函数:BOOL CreatePipe( PHANDLE hReadPipe, // 返回管道读取的句柄 PHANDLE hWritePipe, // 接收管道写入的句柄 LPSECURITY_ATTRIBU
2020-06-29 08:19:47 550
原创 第十七章、进程间的通信
第十七章、进程间的通信//每个进程拥有的4GB空间是私有的,一个进程不能访问另一个进程地址空间中的数据,这里介绍4种进程间的通信方式:剪贴板、匿名管道、命名管道、邮槽。17.1剪贴板//先建立一个对话框应用程序,命名为Clipboard,然后添加如图所示的控件。实现的基本功能就是向左边编辑框输入数据,单击发送按钮,将数据发送到剪切板上;单击接收按钮,从剪切板上面取出数据,并在右边的编辑框中显示出来。17.1.1数据发送//数据放到剪贴板之前,首先得打开剪切板,利用CWnd类的OpenClipbo
2020-06-28 17:11:25 255
原创 16.5基于消息的异步套接字
16.5基于消息的异步套接字//在很多情况下,阻塞方式会影响应用程序的性能,所以有时需要采用非阻塞方式实现网络应用程序,有很多机制可以实现这种方式。采用异步套接字能够有效提高应用程序的性能。16.5.1相关函数的说明//WSAAsyncSelect函数int WSAAsyncSelect ( SOCKET s, //套接字描述符 HWND hWnd, //接收消息的窗口句柄 unsigned int wMsg, //窗口收到的消息 long l
2020-06-24 15:46:31 235
原创 16.2关键代码段
16.2关键代码段关键代码段,也成为临界区,工作在用户方式下。它是指一个小代码段,在代码能够执行之前,它必须独占对某些资源的访问权。16.2.1相关的API函数在进入关键代码段之前,首先得初始化这样一个关键代码段,这个用InitializeCriticalSection函数实现。VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection // address of critical
2020-06-23 09:26:41 187
原创 # 第十六章、线程同步与异步套接字编程 ##
16.1事件对象事件对象也属于内核对象,主要包括三个成员:使用计数;指定是自动重置事件还是人工重置事件的布尔值;指定是已通知状态还是未通知状态的布尔值。16.1.1创建事件对象//CreateEvent函数创建一个匿名或者命名的事件对象:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // 若为NULL,指定默认的安全性 BOOL bManualReset, // TRUE
2020-06-22 10:28:55 174
原创 15.3.2多线程程序容易出现的问题
//如果线程2执行完上述操作之后,正好轮到线程1开始执行,而这时线程1上次是执行到if语句块之后才暂停的,而这时tickets变量的值已经为0了,也就是线程1卖了号码为0的票。//为了避免上述情况的发生,要求在多个线程之间进行一个同步处理,保证一个线程访问共享资源时候,其他线程不能访问该资源。15.3.3利用互斥对象实现线程同步//互斥对象属于内核对象,他能确保线程对单个资源的互斥访问权;互斥对象包含一个使用数量,一个线程ID与一个计数器,其中ID用于标识系统中的那个线程当前拥有互斥对象,计数器表示该
2020-06-19 09:49:29 286
原创 第十五章、多线程
15.1线程创建函数创建线程可以利用系统提供的API函数:CreateThread函数来完成。HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, // 初始化线程大小,若为0时使用默认大小 LPTHREAD_START_ROUTINE lpStartAddress, //新线程起始地址 LPVOID lpParameter, // 给新创建的线程传
2020-06-18 10:02:18 158
原创 14.3基于TCP的网络应用程序的编写
14.3.1服务器端程序先建立一个Win32 Console Application程序,取名为TCPSrv。在应用向导中选择An empty project。然后在该工程下添加一个C++源文件。#include<Winsock2.h>#include<stdio.h>void main(){ //加载套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequ
2020-06-14 15:59:05 543
原创 第十四章、网络编程
14.1Windows Sockets的实现Windows Sockets是Microsoft Windows的网络程序设计,以动态链接库的形式提供给我们使用。14.1.1套接字的类型流式套接字(SOCK_STREAM):流式套接字实际上是基于TCP协议实现的。数据报套接字(SOCK_DGRAM):数据包套接字实际上是基于UDP协议实现的。原始套接字(SOCK_RAW)14.1.2基于TCP(面向连接)的Socket编程基于TCP的Socket编程的服务器端程序流程:1、创建套接字(socket
2020-06-13 11:29:54 194
原创 13.4可串行化类
13.4.1实现类对串行化的支持如果要用CArchive类保存对象的话,那么这个对象的类必须支持串行化。一个可串行化的类通常有一个Serialize成员函数。要想使一个类可串行化,要经历以下5个步骤:1、从CObject派生类2、重写Serialize成员函数3、使用DECLARE_SERIAL宏:DECLARE_SERIAL( class_name )参数就是想要成为可串行化类的类名。4、定义不带参数的构造函数5、为类在实现文件中使用IMPLEMENT_SERIAL宏:IMPLEMENT_
2020-06-12 17:28:24 407
原创 第十三章、文档与串行化
13.1使用CArchive类对文件进行读/写操作我们可以利用CArchive类将对象数据永久地保存到磁盘文件上,再次重启后仍然可以读取对象数据。让对象数据持久性的过程就称为串行化。CArchive对象可以认为就是一种二进制流。首先在创建CArchive对象之前必须先建一个CFile类或其派生类对象;当构造一个CArchive对象后,就可以将它与CFile类或者其派生类对象相关联。应该注意,一个文件(CFile对象)只能与一个活动的存档对象相关联。CArchive类重载了<<和>>
2020-06-08 09:15:09 249
原创 12.6Win.ini文件的访问
12.6.1Win.ini文件的结构现在大部分软件将信息写入注册表中,然后在软件启动时,从注册表中读取这些初始化信息。但是早期的一些程序都是将这些初始化信息写入Win.ini文件中,该文件位于系统安装根目录下的Wi目录下。12.6.2Win.ini文件的写入在程序中,如果想要向Win.ini文件写入一些初始化信息,可以使用WriteProfileString函数来实现。该函数的作用是将一个字符串复制到Win.ini文件指定段中。BOOL WriteProfileString( LPCTSTR l
2020-06-07 08:49:26 997
原创 12.3C++对文件操作的支持
在C++中,向文件写入数据可以用ofstream类来实现ofstream( const char* szName, int nMode = ios::out, int nProt = filebuf::openprot );第一个参数是要打开的文件名;第二个参数指定文件打开的模式;第三个参数指定文件保护规格。下面利用ofsream类实现文件的写入操作:void CFileView::OnFileWrite() { // TODO: Add your command handler code he
2020-06-06 08:20:22 231
原创 第十二章、文件和注册表操作
12.1const char*和char *constconst char*:不能修改其指向的内存中的内容,但可以修改其所指向的内存地址。char *const:能修改其指向的内存中的内容,但不可以修改其所指向的内存地址。12.2C语言对文件操作的支持新建一个单文档类型的MFC程序,取名为File。然后添加一个子菜单,名称为:文件操作。然后为其添加两个菜单项,并分别添加视类的命令响应函数:ID:IDM_FILE_WRITE 菜单名称:写入文件 响应函数:OnFileWriteID:IDM_FI
2020-06-05 08:50:00 154
原创 11.3窗口滚动功能的实现
11.3.1CScrollView类在创建向导的第六步可以把视类的基类选择为CScrollView,这样,视图窗口就有了滚动功能。如图。在这里也可以手工将视图的基类由CView改为CStrollView:先将视类头文件中将CView修改为CScrollView。Edit->Replace->Find what输入CView,Repalce with输入CStrollView->选中Match whole word only,单击Repalce All。就可以将视类源文件中的也修改
2020-06-02 09:15:56 804
原创 第十一章、图形的保存和重绘
11.1坐标空间和转换11.1.1坐标空间和转换Win32应用程序编程接口(API)使用四种坐标空间:世界坐标系空间、页面空间、设备空间和物理设备空间。前两种称为逻辑空间,最后一种通常指应用程序窗口的客户区。11.1.2转换如果应用程序调用了SetWorldTransform函数,那么映射就从世界坐标系空间开始;否则,映射在页面空间进行。转换是把对象从一个坐标空间复制到另一个坐标空间时改变或者转变这一对象的大小、方位和形态。在实际绘图时,世界坐标系空间中的一个区域要先被映射到页面空间,然后再由
2020-06-01 13:23:41 392
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人