上一页 1 ··· 161 162 163 164 165 166 167 168 169 ··· 191 下一页
摘要: 在写服务器程序里,很多地方都需要使用到线程池。特别现在多处理器的CPU越来越普及,使用多个线程池是明显提高服务器程序的性能。在以消息为基础的Windows系统里,使用消息来处理是最简单的线程池办法,不但使用起来简单,而且理解起来也很简单的方法。创建多个线程后,就可以根据线程的ID来向不同的线程发送消息,每个线程都处理自己的消息。而发送消息给线程的函数是PostThreadMessage函数。下面来演示怎么样使用这个函数。函数PostThreadMessage声明如下:WINUSERAPIBOOLWINAPIPostThreadMessageA( __in DWORD idThread, __i 阅读全文
posted @ 2007-10-11 23:16 ajuanabc 阅读(281) 评论(0) 推荐(0)
摘要: 以前我一直用XP机器安装SQL Server2000个人版来调试程序,后来在项目中,客户要求在Windows2003下安装SQL Server2000企业版,安装完成后并打了sp3的补丁,但发现虽然企业管理器中数据库实例正常运行,但客户端主机配置ODBC无论如何也连不上数据库,安装数据库的机器上虽然配通了ODBC,但是配置ODBC数据源时,服务器名,客户端配置窗口的服务器别名及服务器名称都是主机名/数据库实例名的格式,直接使用主机名或IP地址是不行的,安装了sql server的sp4补丁后,发现可以直接使用主机名或IP地址来配置服务器名称,不需要用主机名/数据库实例名的格式。客户端配置OD. 阅读全文
posted @ 2007-10-11 14:41 ajuanabc 阅读(167) 评论(0) 推荐(0)
摘要: 在开发软件的过程中,多线程的程序往往需要实现相互通讯,比如几个线程添加一个消息到队列里,而另一个线程在睡眠时,就需要唤醒那个线程来处理事情。在这其中,就需要使用到信号量来进行同步。CreateSemaphore是创建信号量,ReleaseSemaphore是增加信号量。函数CreateSemaphore和ReleaseSemaphore声明如下:WINBASEAPI__outHANDLEWINAPICreateSemaphoreA( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, __in LONG lInitialCount, __ 阅读全文
posted @ 2007-10-10 21:11 ajuanabc 阅读(249) 评论(0) 推荐(0)
摘要: 作者:阿捷 尽管在我的网站和文章里都有提到CSS制作菜单的方法,但很多初学者还是不太清楚如何实现,以及实现原理,我想专门写一篇详细教程会对大家比较有帮助。我们先来看一个菜单的例子,最终效果是:首页 产品介绍 服务介绍 技术支持 立刻购买 联系我们 然后我们来详细讲解步骤第一步:建立一个无序列表我们先建立一个无序列表,来建立菜单的结构。代码是:<ul><li><a href="1">首页</a></li><li><a href="2">产品介绍</a></ 阅读全文
posted @ 2007-10-10 11:01 ajuanabc 阅读(201) 评论(0) 推荐(0)
摘要: 通用在线播放代码(支持firefox 与 IE)来源: 互联网作者: 飞云点击: 0 RealMedia <object id="RVOCX" classid="CLSID:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="320" height="172"> <param name="SRC" value="realmedia.rm"> <param name="CONTROLS" v 阅读全文
posted @ 2007-10-10 11:00 ajuanabc 阅读(164) 评论(0) 推荐(0)
摘要: 今天注册了一个免费空间,大小没限制,流量有限制的。支持ASP,PHP,.NET。注册地址 http://web.thec.cn/sysweb/RegTrans.aspx?CodeProvider=piperzero 阅读全文
posted @ 2007-10-09 08:41 ajuanabc 阅读(86) 评论(0) 推荐(0)
摘要: 前几天遇到一个奇怪问题,插入了一根IDE转USB的线,结果电脑启动时候一直停留在主板LOGO处,刚开始没有发现,拔了线后正常。 阅读全文
posted @ 2007-10-08 12:48 ajuanabc 阅读(114) 评论(0) 推荐(0)
摘要: 当你创建一个线程时,其实那个线程是一个循环,不像上面那样只运行一次的。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。当在线程里运行阻塞的函数时,就需要在退出线程时,先要把阻塞状态变成非阻塞状态,比如使用一个线程去接收网络数据,同时使用阻塞的SOCKET时,那么要先关闭SOCKET,再发送事 阅读全文
posted @ 2007-09-25 21:32 ajuanabc 阅读(191) 评论(0) 推荐(0)
摘要: 接着上面,再继续实现更加强大的线程类。从上面的C++类里可以看到,要在静态函数里使用类的成员就需要获取this指针,也就是通过CreateThread函数里把类的this指针传送进来的,这样在函数ThreadProc里的参数lpParameter就是this指针了。因此把参数lpParameter转换为CThread类指针,这样就可以使用类的成员。在这个例子里使用wsprintf函数来格式化线程ID输出来,下面就来详细地分析例子吧。函数wsprintf声明如下:WINUSERAPIintWINAPIVwsprintfA( __out LPSTR, __in __format_string LP 阅读全文
posted @ 2007-09-24 21:39 ajuanabc 阅读(196) 评论(0) 推荐(0)
摘要: 上面已经介绍怎么样创建一个简单的线程,在那里就需要使用函数WaitForSingleObject,它是用来做什么的呢?其实它是用来实现等待线程结束的,它的机理是这样的,通知Windows操作系统,现在我进入睡眼状态,当我关注的对象条件是否满足,如果满足了就吵醒我。在那里关注的对象是线程是否退出,这是一个条件测试。如果不等待线程关闭,就去删除线程的资源,就会出错的。使用前面的线程是简单一些,但它不合适复用,现在就使用C++的类来封装一个比较好用的类,这样就可以很方便地创建很多线程来使用,当然还可以继承它,实现更复杂的功能,下面就来学习这个例子。函数WaitForSingleObject声明如下: 阅读全文
posted @ 2007-09-23 11:19 ajuanabc 阅读(140) 评论(0) 推荐(0)
上一页 1 ··· 161 162 163 164 165 166 167 168 169 ··· 191 下一页