- 博客(14)
- 资源 (5)
- 收藏
- 关注
原创 SQLDescribeCol和SQLGetData
<br />这几天做一个东西,要用到ODBC API的一些东西,遇到几个问题,说出来,大家一起注意一下<br />1,SQLDescribeCol与smalldatetime<br /> SQLDescribeCol函数返回列的信息,其中包括列的大小,我在项目中,对于常用的类型,都用相应的数据类型来取数据,对于非常用的类型,就根据这个函数返回的列的大小,来申请一这个大小的空间,然后绑定接收数据,这个方法对于许多类型都是可以用的,但对于smalldatatime却出了意外。<br /> smal
2011-05-25 16:24:00 6055
原创 前营中间件(6) - 组件的接口
<br /> 我们在编写组件时,需要利用中间件的一些资源,而我们把操作这些资源的接口全部集中到ZContextAPI中,在我们编写组件中,每个组件的响应函数中,都会传进此指针.所以这个接口对我们来说是非常重要的.对此接口中的许多函数我们前面都有所讲过,我们此文先讨论一下与多播和广播相关的函数.<br /> 广播,在我们的中间件中,发送广播的功能是由组件中实现的,而对应的函数就是PostBroadCastPack,它有两种形式, 一个是以缓存区为源数据,一个是以指令为源数据,我们在中间件的
2010-07-21 17:02:00 1088
原创 前营中间件(5) - 异步发包和客户端的操作函数
<br />上次,我们介绍了同步发送接收模式,现在我们介绍一下异步模式,下面是异步发送函数:<br />/**<br /> * 函数名称:异步发送消息<br /> * 函数功能:将数据发送出去,系统会自动打个发送标志,并把对应的序号写入消息中并返回,应答<br /> * 序号写为。<br /> * 参数列表:<br /> * @uiSessionID : 会话ID<br /> * @uiFuncNo
2010-07-13 15:31:00 1086
原创 前营中间件(4) - 客户端的实现
我们已经介绍了组件的写法,下面就介绍一个客户的写法,客户端的所有操作都在ZClientAPI.dll进行了实现,此文件只有一个导出函数LPCLIENTAPI __stdcall GetClientAPI(),此函数取得一个接口指针LPCLIENTAPI,这个接口指针的声明可以在”ZClientAPI.h”中找到,它提供了大量的函数,但我们此处不打算全部进行讲解,只讲解我们实现上次提到的那个功能所需要的函数.我们需要哪些功能呢?让我们先想一想:我们上次提到要计算一个数的平方,组件已经写好了,中间件已经启动.那
2010-07-13 13:54:00 1029
原创 前营中间件(3) - 组件的开发
<br />下面,我们通过一个简单的例子来介绍此系统的使用.<br />我们实现一个简单功能,在前台输入一个整数,后台对此进行平方操作后返回.下面我们先从服务端的组件开发进行介绍,同时会介绍相应的配置的修改和系统的测试.<br />组件开发:<br />一个组件需要开发成什么样子?我们首先想象一样,如果我们想要提供一个功能,需要知道什么?我们首先要知道给什么请求提供?怎么处理这个请求?处理这个请求是否还需要什么样的资源?我们把这几个问题解决掉了,还需要把这些信息告诉中间件,让中间件能够正确根据请求包的信息,
2010-07-13 12:44:00 978
原创 前营中间件(2) - 配置
<br /> 前营中间件的配置文件采用XML格式,下面是一份完成的配置文件,我将以此文件进行讲解:<br /><?xml version="1.0" encoding="gb2312"?><br /><Qianyin ver="0.1"><br /> <WorkThread used="1"><br /> <MessageList Discard="0" MaxCount="3096"/><br /> </WorkThread><br /> <Servers><br /> <Server Seq
2010-07-08 16:42:00 1063
原创 读写锁管理器的实现
/** * 利用LOCK汇编指令实现了多CPU情况下的,多线程同步问题, **/ typedef struct ZRWLock{ enum { MAX_WAIT_OBJECTS_COUNT = 0xff, // 写锁上最大等待数量 INIT_VAR_VALUE = -1, // 变量初始值 VAR_ENTER_VALUE = 0, // 获到锁
2010-02-08 16:13:00 1026
原创 临界区
WINDOWS下临界区的实现思路很简单,就是如果只有一个线程进入临界区的时候,只记录此线程的ID,让线程继续运行,如果此线程还没有离开临界区时又有另一个线程要进入临界区时,就生成一个内核对象,然后在此内核变量上进行等待,当线程退出时,把内核变量设置成受信状态,唤醒等待的线程。实现方法可以分成两部分,一部分是进入线程的控制,在CRITICAL_SECTION结构中有一个变量表示进入线程循环进入的
2010-01-09 16:48:00 8527
原创 windows下轻量级互斥锁
typedef class mutex_lock{public: mutex_lock() : LockCount(-1) , hEvent(0) { } ~mutex_lock() { if(NULL != this->hEvent) { CloseHandle(this->hEvent); } this->hEvent = NULL; this->LockCount = -1
2010-01-06 16:47:00 3830
原创 IOCP线程数量
对于IOCP的线程大部分书上介绍是为CPU数量的两倍,这应该是经验数字,但是我们也不能完全照搬这个数字,比如说,如果我们在线程上处理了大量的数据库操作,线程同步操作,就会使线程处理等待状态,这样线程就有可能不够用了。因此,我们最好能动态创建线程的数量,我们在系统中保留一个正在等待线程的数量,当每个线程唤醒时,先检查此数字是否为0,为0时则创建一个新的线程,当然,在创建创建的同时要注意加锁
2009-12-25 08:39:00 2800
原创 IOCP网络包重组问题
目前,IOCP已经广泛用于网络程序设计了,由于IOCP基本多线程对网络数据进行接收,因为数据包的重组往往成功程序员处理IOCP最难做的事情, 近来在做相交的项目,也颇费了一番心思,现把我的处理方法写下来。 由于TCP连接传输数据会把数据包是流的方式进行,因为,我们在客户端接收数据时,每次recv函数结束得到的并不一定是我们以前每次调用send函数所发送的完整数据,但TCP传输
2009-12-24 10:56:00 2711
原创 全局钩子
安装WH_JOURNALPLAYBACK, WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL之类的全局钩子时,系统不能处理堵塞模式.因为,实行挂钩内容的线程为挂钩线程,如果此线程堵塞住的话,那么函数就会超时退出.
2009-01-22 12:58:00 841
原创 spy++ 消息钩子漫谈
spy++ 消息钩子漫谈我们经常使用SPY++来查看应用程序所处理的消息情况,但经常在网上看到许多人在问,SPY++是如何把应用程序所处理的消息展现出来的呢?许多人提出了很好的建议,但是资料都太零散,查找起来比较费力,我在此整理出来供大家分享。在讲具体问题之前,我们先讲一些题外话,这样对我们下面的讲解会有帮助,一 消息队列在WINDOWS操作系统中,我们比较了解的消息队列有两种:一
2009-01-21 21:03:00 4111 1
原创 DELPHI线程类挂起的问题
DELPHI线程类挂起的问题 ——赵海杰对于用过Delphi的TThread类的兄弟应该很了解,在Tthread中有个Suspended属性,如果Suspended属性为True时,则表示线程是挂起状
2007-07-02 09:41:00 7587 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人