摘要: 更改方法:项目-属性-配置属性-常规-字符集-使用多字节字符集 阅读全文
posted @ 2013-06-13 15:46 liuhao2638 阅读(1063) 评论(0) 推荐(0) 编辑
摘要: Windows定时器 在以Windows以平台的实时控制系统中,常常需要定时或周期性的完成某个动作,采样时间的精度是系统得以正常运行的关键,对以Dos为平台的控制系统,可以通过对硬件的直接操作而得到精确的采样时间,而对于Windows平台,由于Windows平台为抢占式多任务操作系统,系统管理所有硬件资源,用户无法直接同硬件打交道,时间控制离不开操作系统的支持,因此,在Windows平台下如何精确的控制采样频率是一个很关键的技术。一.普通定时器 普通定时器是依赖消息机制的时间控制方法,首先由SetTimer函数创建一个内存对象,设定间隔时间,当到达要求的时间间隔时,计时器对象发送一个WM_.. 阅读全文
posted @ 2013-06-13 15:25 liuhao2638 阅读(6155) 评论(0) 推荐(1) 编辑
摘要: 线程间的同步控制前言:撰写多线程程序的一个最具挑战性的问题是:如何让一个线程和另一个线程合作,即如何进行进程和线程的协调工作,线程间的协调工作是由同步机制完成的,同步机制相当于线程之间的红绿灯,我们可以设计让一组线程使用同一个红绿灯系统,这个红绿灯系统必须达到如下两个目的:1) 这个红绿灯系统负责给某个线程绿灯而给其他线程红灯2) 这组红绿灯系统必须确保每一个线程都有机会获得绿灯有很多种同步机制可以运用,使用哪一种同步机制完全视欲解决的问题而定,我们这节讨论每一种同步机制的使用方法,并对每一种同步机制,分析”为什么使用”及”何时使用”Critical Sections(关键区/临界区)Crit 阅读全文
posted @ 2012-11-14 16:31 liuhao2638 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 精确测量一段代码的执行时间1.LARGE_INTERGER类型LARGE_INTERGER是union类型,用于表示一8个字节的有符号整数,定义如下:typedef union _LARGE_INTERGER{ struct{ DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart;}LARGER_INTERGER;如果编译器支持64整数,可以直接使用QuadPart(64位),否则分别对LowPart和HighPart存取,HighPart的最高位为符号位表示数的范围:-3689348814741910324到+46116860184273879 阅读全文
posted @ 2012-11-13 21:09 liuhao2638 阅读(2741) 评论(0) 推荐(0) 编辑
摘要: 多线程等待的艺术-等待一个线程的结束前言: 等待某件事情的发生是线程经常要做的事情,当你读取用户的输入,或是存取磁盘文件时,线程必须等待,当结束主线程之前,我们要保证这个进程的所有用户线程已经结束-如何等待其他线程的结束-是一个值得深思的问题 之前我们使用GetExitCodeThread()判断一个线程是否还在执行,通过不断的检查GetExitCodeThread()的返回值,判断某个线程是否结束,只有线程真正结束时,我们才结束主线程,如果我们没有等待线程结束就莽撞的结束主线程,可能线程会在完成它的工作之前就被强制的结束掉,造成不可预料的后果 通过GetExitCodeThread()... 阅读全文
posted @ 2012-11-13 16:44 liuhao2638 阅读(782) 评论(0) 推荐(0) 编辑
摘要: 序:本讲主要介绍产生,监视,退出线程的Win32函数及一个线程的运转过程1.一个单纯的函数调用和通过启动线程调用的比较面对一个单纯的函数调用操作,控制权会转移到被调用函数中,执行完毕后再返回到原调用处,如:void main(){ int resuilt; resuilt = square(5); print(resuilt);}int resuilt(int n){ … …}2.启动一个线程调用函数启动线程调用函数时,我们不直接调用函数,而是通过CreateThread()创建一个线程,把要调用的函数的地址传给这个线程,在这个新线程中调用函数,原来的线程继续前进,即函数调用异步的进行了,一旦 阅读全文
posted @ 2012-11-12 16:56 liuhao2638 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 进程和线程1.进程从Win32的角度来看,进程就是一大堆对象的拥有权的集合,进程拥有的对象包括内存和资源两类进程拥有的内存:被进程拥有的内存可以分为以下三个类型1) CodeCode是程序的可执行部分,一定是只读性质2) DataData是程序中的所有变量(不包括函数中的局部变量),可以分为全局变量和静态变量两种3) Stack每个线程产生时配有一个堆栈,调用函数是也会分配一个堆栈,Stack中存放着局部变量注:这些内存对进程中的所有线程都是可用的,这在多线程中带来了很大的方便,同时也带来很大的灾难进程拥有的资源:进程拥有的资源包括以下几类1) 核心对象如线程即文件句柄2) USER资源如对话 阅读全文
posted @ 2012-11-11 19:20 liuhao2638 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 前言:程序是乏味的代言人,程序世界是如此的单调,上帝说,让世界变的精彩,从此有了多线程程序设计从第一台计算机出现开始,顺序程序设计就开始深入人心,将任务划分为一个流程,交给计算机去做,一切都那么理所当然,程序世界就像一个黑白的世界,井然有序却又单调乏味,多线程多任务程序设计理念的提出,让程序世界开始变的五彩缤纷,精彩却也引入了很多可能导致混乱的因素。多线程程序设计是一个设计技巧而不是一个编程技巧,是和单线程顺序程序设计并列的两个分支,多线程多任务使程序的效率得以高度发挥1) 改善用户对软件操作的感受2) 使同一时间的一台服务器上提供对成百上千用户的支持用户只是知晓其效果,而我们程序员要思考的是 阅读全文
posted @ 2012-11-10 10:15 liuhao2638 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 套接字选项套接字创建之后,可使用套接字选项设置套接字的属性,以改变套接字的行为1.setsockopt()int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen)函数功能:设置套接字选项参数:第一个参数是套接字句柄 第二个参数指定此选项被定义在哪个级别,SOL_SOCKET,IPPROTO_TCP, IPPROTO_IP等 第三个参数是设置的套接字选项名称 第四个参数指定一个缓冲区用来存放设置的选项 第五个参数是第四个参数的大小,即指定的缓冲区大小返回:如果函数执行成功,返回0,执行... 阅读全文
posted @ 2012-11-08 20:37 liuhao2638 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 1.htons()u_short htons(u_short hostshort);功能:把一个u_short类型的值从主机字节顺序转换为网络字节顺序参数:一个以主机字节顺序表示的16位数值返回:网络字节序表示的16位数值2.htonl()u_long htonl(u_long hostlong);功能:把一个u_long类型的值从主机字节序转换为网络字节序参数:一个以主机自己序表示的32位数值返回:网络字节序表示的32位数值基于UDP的数据发送和接受函数:3.sendto()int sendto(SOCKET s, const char FAR * buf, int len,int flag 阅读全文
posted @ 2012-11-07 16:06 liuhao2638 阅读(249) 评论(0) 推荐(0) 编辑