??xml version="1.0" encoding="utf-8" standalone="yes"?>
找了好几天了Q很多资源都下不?br>
今天好不Ҏ下了一个,但是香港版的Q且安装到选择盘符Ӟ键盘所有键都不能用,所以还是无法安?br>
谢谢各位大哥大姐帮帮忙,弟感激不尽Q?img src ="http://www.shnenglu.com/twzheng/aggbug/109710.html" width = "1" height = "1" />
]]>
摘自 CSDN
我在Cernet做过拨号接入q_的搭建,而后?/span>Yahoo3721负蝲搜烦引擎前端q_开发,又在猫扑处理q大型社区猫扑大杂烩的架构升U等工作Q同时自己接触和开发过不少大中型网站的模块Q因此在大型|站应对高负载和q发的解x案上有一些积累和l验Q可以和大家一h讨一下?/span>
我在Cernet做过拨号接入q_的搭建,而后?/span>Yahoo3721负蝲搜烦引擎前端q_开发,又在猫扑处理q大型社区猫扑大杂烩的架构升U等工作Q同时自己接触和开发过不少大中型网站的模块Q因此在大型|站应对高负载和q发的解x案上有一些积累和l验Q可以和大家一h讨一下?/span>
一个小型的|站Q比如个人网站,可以使用最单的html静态页面就实现了,配合一些图片达到美化效果,所有的面均存攑֜一个目录下Q这L|站对系l架构、性能的要求都很简单,随着互联|业务的不断丰富Q网站相关的技术经q这些年的发展,已经l分到很l的Ҏ面面Q尤其对于大型网站来_所采用的技术更是涉及面非常q,从硬件到软g、编E语a、数据库?/span>WebServer、防火墙{各个领域都有了很高的要求,已经不是原来单的html静态网站所能比拟的?/span>
大型|站Q比如门L站。在面对大量用户讉K、高q发h斚wQ基本的解决Ҏ集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编E语a、还有高性能?/span>Web容器。但是除了这几个斚wQ还没法Ҏ解决大型|站面的高负蝲和高q发问题?/span>
上面提供的几个解x\在一定程度上也意味着更大的投入,q且q样的解x\具备瓉Q没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验?/span>
1?/span>HTML静态化
其实大家都知道,效率最高、消耗最的是U静态化?/span>html面Q所以我们尽可能使我们的|站上的面采用静态页面来实现Q这个最单的Ҏ其实也是最有效的方法。但是对于大量内容ƈ且频J更新的|站Q我们无法全部手动去挨个实现Q于是出C我们常见的信息发布系l?/span>CMSQ像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布pȝ来管理和实现的,信息发布pȝ可以实现最单的信息录入自动生成静态页面,q能具备频道理、权限管理、自动抓取等功能Q对于一个大型网站来_拥有一套高效、可理?/span>CMS是必不可的?/span>
除了门户和信息发布类型的|站Q对于交互性要求很高的Ccd|站来说Q尽可能的静态化也是提高性能的必要手D,社区内的帖子、文章进行实时的静态化Q有更新的时候再重新静态化也是大量使用的策略,?/span>Mop的大杂烩是使用了这L{略Q网易社区等也是如此?/span>
同时Q?/span>html静态化也是某些~存{略使用的手D,对于pȝ中频J用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼ比如论坛中论坛的公用讄信息Q这些信息目前的L论坛都可以进行后台管理ƈ且存储再数据库中Q这些信息其实大量被前台E序调用Q但是更新频率很,可以考虑这部分内容q行后台更新的时候进行静态化Q这样避免了大量的数据库讉Kh?/span>
2、图片服务器分离
大家知道Q对?/span>Web服务器来_不管?/span>Apache?/span>IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|站都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|?/span>ContentType的时候可以尽量少支持Q尽可能的LoadModuleQ保证更高的pȝ消耗和执行效率?/span>
3、数据库集群和库表散?/span>
大型|站都有复杂的应用,q些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓉很快p昄出来Q这时一台数据库很快无法满_用,于是我们需要用数据库集群或者库表散列?/span>
在数据库集群斚wQ很多数据库都有自己的解x案,Oracle?/span>Sybase{都有很好的ҎQ常用的MySQL提供?/span>Master/Slave也是cM的方案,您用了什么样?/span>DBQ就参考相应的解决Ҏ来实施即可?/span>
上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q库表散列是常用q且最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ个页面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性?/span>sohu的论坛就是采用了q样的架构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最l可以在配置文g中进行简单的配置便能让系l随时增加一C成本的数据库q来补充pȝ性能?/span>
4、缓?/span>
~存一词搞技术的都接触过Q很多地方用到缓存。网站架构和|站开发中的缓存也是非帔R要。这里先讲述最基本的两U缓存。高U和分布式的~存在后面讲q?/span>
架构斚w的缓存,?/span>Apache比较熟悉的h都能知道Apache提供了自q~存模块Q也可以使用外加?/span>Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力?/span>
|站E序开发方面的~存Q?/span>Linux上提供的Memory Cache是常用的~存接口Q可以在web开发中使用Q比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大型社Z用了q样的架构。另外,在?/span>web语言开发的时候,各种语言基本都有自己的缓存模块和ҎQ?/span>PHP?/span>Pear?/span>Cache模块Q?/span>Java更多了Q?/span>.net不是很熟悉,怿也肯定有?/span>
5、镜?/span>
镜像是大型网站常采用的提高性能和数据安全性的方式Q镜像的技术可以解决不同网l接入商和地域带来的用户讉K速度差异Q比?/span>ChinaNet?/span>EduNet之间的差异就促了很多网站在教育|内搭徏镜像站点Q数据进行定时更新或者实时更新。在镜像的细节技术方面,q里不阐q太深,有很多专业的现成的解x构和产品可选。也有廉L通过软g实现的思\Q比?/span>Linux上的rsync{工兗?/span>
6、负载均?/span>
负蝲均衡是大型|站解决高负药问和大量q发h采用的终极解军_法?/span>
负蝲均衡技术发展了多年Q有很多专业的服务提供商和品可以选择Q我个h接触q一些解x法,其中有两个架构可以给大家做参考?/span>
g四层交换
W四层交换用第三层和第四层信息包的报头信息Q根据应用区间识别业务流Q将整个区间D늚业务分配到合适的应用服务器进行处理。 W四层交换功能就象是?/span>IPQ指向物理服务器。它传输的业务服从的协议多种多样Q有HTTP?/span>FTP?/span>NFS?/span>Telnet或其他协议。这些业务在物理服务器基上,需要复杂的载量q法。在IP世界Q业务类型由l端TCP?/span>UDP端口地址来决定,在第四层交换中的应用区间则由源端和终?/span>IP地址?/span>TCP?/span>UDP端口共同军_?/span>
在硬件四层交换品领域,有一些知名的产品可以选择Q比?/span>Alteon?/span>F5{,q些产品很昂贵,但是物有所|能够提供非常优秀的性能和很灉|的管理能力?/span>Yahoo中国当初接近2000台服务器使用了三四台Alteon搞定了?/span>
软g四层交换
大家知道了硬件四层交换机的原理后Q基?/span>OSI模型来实现的软g四层交换也就应运而生Q这L解决Ҏ实现的原理一_不过性能E差。但是满一定量的压力还是游刃有余的Q有软g实现方式其实更灵z,处理能力完全看你配置的熟悉能力?/span>
软g四层交换我们可以使用Linux上常用的LVS来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线heartbeat的实时灾隑ֺ对解x案,提高pȝ的鲁性,同时可供了灵zȝ虚拟VIP配置和管理功能,可以同时满多种应用需求,q对于分布式的系l来说必不可?/span>
一个典型的使用负蝲均衡的策略就是,在Y件或者硬件四层交换的基础上搭?/span>squid集群Q这U思\在很多大型网站包括搜索引擎上被采用,q样的架构低成本、高性能q有很强的扩张性,随时往架构里面增减节点都非常容易。这L架构我准备空了专门详l整理一下和大家探讨?/span>
对于大型|站来说Q前面提到的每个Ҏ可能都会被同时用到Q我q里介绍得比较浅显,具体实现q程中很多细节还需要大家慢慢熟悉和体会Q有时一个很的squid参数或?/span>apache参数讄Q对于系l性能的媄响就会很大,希望大家一赯论,辑ֈ抛砖引玉之效?/span>
原文链接Q?/span>http://sunjiuchen.spaces.live.com/Blog/cns!4FF388881B3FE073!113.entry
IDS的技术手D其实ƈ不很秘Q接下来本文会用一U?#8220;摸瓜”的脉l,l大家介l一个较单的IDS入门U构架。从市场分布、入手难易的角度来看Q选择NIDS作ؓ范例q行部vQ比较地恰当。本文以完全的Windowsq_来诏I整个入?nobr>?/nobr>程Q由于篇q所限,以定?nobr>分析角度来陈q?
预备知识
IDSQIntrusion Detection SystemQ入侉|?nobr>pȝQ,通过攉|络pȝ信息来进行入侉|分析的软g与硬件的l合?
对IDSq行标准化工作的两个l织Q作为国际互联网标准的制定者IETF的Intrusion Detection working GroupQIDWGQ入侉|工作组Q和Common Intrusion Detection FrameworkQCIDFQ通用入R框Ӟ?
IDS分类QNetwork IDSQ基于网l)、Host-based IDSQ基于主机)、Hybrid IDSQ合式Q、Consoles IDSQ控制台Q、File Integrity CheckersQ文件完整性检查器Q、HoneypotsQ蜜|)。事件生系l?
ҎCIDF阐述入R系l(IDSQ的通用模型思想Q具备所有要素、最单的入R组件如图所C。根据CIDF规范Q将IDS需要分析的数据l称为EventQ事ӞQEvent既可能是|络中的Data PacketsQ数据包Q,也可能是从System Log{其他方式得到的InformationQ信息)?
没有数据进Q或数据被采集)QIDS是无根之木Q完全无用武之地?
作ؓIDS的基层组l,事g产生pȝ大可施展拌Q它攉被定义的所有事Ӟ然后一股脑C到其它组仉。在Windows环境下,目前比较基本的做法是使用Winpcap和WinDump?
大家知道Q对于事件生和事g分析pȝ来说Q眼下流行采用Linux和Unixq_的Y件和E序Q其实在Windowsq_中,也有cMLibpcapQ是Unix或Linux从内核捕Ll数据包的必备YӞ的工具即Winpcap?
Winpcap是一套免费的Q?ZWindows的网l接口APIQ把|卡讄?#8220;h”模式Q然后@环处理网l捕L数据包。其技术实现简单,可移植性强Q与|卡无关Q但效率不高Q适合?00 Mbps以下的网l?
相应的基于Windows的网l嗅探工hWinDumpQ是Linux/Unixq_的Tcpdump在Windows上的UL版)Q这个Y件必d于Winpcap接口Q这里有人Ş象地UWinpcap为:数据嗅探驱动E序Q。用WinDumpQ它能把匚w规则的数据包的包头给昄出来。你能用这个工具去查找|络问题或者去监视|络上的状况Q可以在一定程度上有效监控来自|络上的安全和不安全的行为?
q两个Y件在|上都可以免费地扑ֈQ读者还可以查看相关软g使用教程?
下面大略介绍一下徏立事件探及采集的步?
1、装配Y件和gpȝ。根据网l繁忙程度决定是否采用普通兼Ҏ或性能较高的专用服务器Q安装NT核心的Windows
2、服务器的空间划分要合理有效Q执行程序的安装、数据日志的存储Q两者空间最好分别放|在不同分区?
3、Winpcap的简单实现。首先安装它的驱动程序,可以到它的主|镜像站点下蝲WinPcap auto-installer (Driver+DLLs)Q直接安装?
注:如果用Winpcap做开发,q需要下?DeveloperQs pack?
WinPcap 包括三个
4、WinDump的创建。安装后Q在Windows命o提示W模式下q行Q用戯己可以查看网l状态,恕不赘述?
如果没有软g兼容性问题、安装和配置正确的话Q事件探及采集已能实现?/p>
事g分析pȝ
׃我们的网l大都用交换式以太网交换接,所以徏立事件分析系l的目的是实现对多种|络防火墙设备的探测Q以及多U采集方式(如基于Snmp、Syslog数据信息的采集)日志的支持,q提供一定的事g日志处理Q统计、分析和查询功能?
事g分析pȝ是IDS的核心模块,主要功能是对各种事gq行分析Q从中发现违反安全策略的行ؓQ如何徏立是重点也是隄。如果自p或与人合作编写Y件系l,需要做好严谨的前期开发准备,如对|络协议、黑客攻凅R系l漏z有着比较清晰的认识,接着开始制定规则和{略Q它应该Z标准的技术标准和规范Q然后优化算法以提高执行效率Q徏立检模型,可以模拟q行d及分析过E?
事g分析pȝ把检引擎驻留在监视|段中,一般通过三种技术手D进行分析:模式匚w、协议分析和行ؓ分析。当到某种误用模式Ӟ产生对应的警告信息ƈ发送给响应pȝ。目前来看,使用协议分析是实时检的最好方式?
q个pȝ一U可能的方式是由协议分析器作Z体,可以在现成的、开攑ּ的协议分析工具包基础上来构徏Q协议分析器可以昄分组U网l传输流Q基于网l协议规则的警告q行自动分析来快速探攻ȝ存在Q由此,|络E序员和理员可监控q分析网l活动,从而主动检ƈ定位故障。用户可以尝试一下一个叫Ethereal的免费网l协议分析器Q它支持Windowspȝ。用户可以对׃件生系l抓取后保存在硬盘上的数据进行分析。你能交互式地浏览抓取到的数据包Q查看每一个数据包的摘要和详细信息。Ethereal有多U强大的特征Q如支持几乎所有的协议、丰富的qo语言、易于查看TCP会话l重构后的数据流{?
响应pȝ
响应pȝ是面向h、物的交互系l,可以说是整个pȝ的中转站和协调站。hxpȝ理员、物是其他所有组件。详l说来,响应pȝq个协调员要做的事很多:按照预置定义的方式,记录安全事g、生报警信息(如E-mail形式Q、记录附加日志、隔d侵者、终止进E、禁止受完的端口和服务、甚臛_戈一击;可以采取人工响应和自动响应(Z机器的响应)Q两者结合v来会比较好?
响应pȝ的设计要?
(1) 接受自事件生系l经事g分析pȝqo、分析、重建后的事件警报信息,然后交互l用P理员)查询q做则判断和采取理行ؓ?
(2) l管理员提供理事g
(3)作用于前端系l时Q可理事g产生、分析系l(合称事g探测器)Q对该系l采集、探、分析的事gq行分类、筛选,可针对不同安全状况,重新对安全规则进行洗牌?
响应pȝ和事件探器通常是以应用E序的Ş式实现?
设计思\Q响应系l可分ؓ两个E序部分Q监听和控制?监听部分l定某个I闲端口Q接收从事g探测器发出的分析l果和其他信息,q{化存储文件到事g数据库系l中Q作为管理员可根据用h限调用来只读、修改以及特别的操作。控刉分可用GTKQ来~写GUIQ开发出较ؓ直观的图形用L面,目的主要是给用户一个更方便友好的界面来览警告信息?
事g数据库系l?
在Windowsq_下,虽然Access更易掌握Q但采用SQL Server 2000构徏会比Access有效Q而且q不是很隑օ手,此系l主要功能:记录、存储、重排事件信息,可供理员调用查看和Ҏd查取证用?
此系l构造相对简单,只需利用到数据库软g的一些基本功能?
要协调各lg之间的有目的通信Q各lg必能正确理解怺之间传递的各种数据的语义。可参考CIDF的通信机制Q构?层模型。注意各个组件之间的互操作性,保证安全、高效、顺畅?
整合在后l的工作中会不断q行Q各个组件的功能也会不断完善。一个基本的、基于Windowsq_的IDS框架构建完毕。满网l条件的话,试试亲手做做自己的奶酪吧Q有一U不可名状的劳作后的甜蜜?/p>
在进行多U程E序设计的时?我们l常用到AfxBeginThread函数来启动一条线E?br>该函C用v来非常的单方?其定义如?CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,//U程函数地址
LPVOID pParam,//U程参数
int nPriority = THREAD_PRIORITY_NORMAL,//U程优先U?br> UINT nStackSize = 0,//U程堆栈大小,默认?M
DWORD dwCreateFlags = 0,//
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);参数说明:
pfnThreadProc:U程函数的地址,该参C能设|ؓNULL,U程函数必须定义成全局函数或者类的静态成员函?br>例如:
UINT myThreadFunc(LPVOID lparam)
或?br>class A
{
public:
static UINT __stdcall myThreadFunc(LPVOID lparam);
}
之所以要定义成类的静态成员函?是因为类的静态成员函C属于某个cd?q样在调用函?br>的时候就不用传递一个额外的this指针.pThreadClass:指向从CWinThreadz的子cd象的RUNTIME_CLASS
pParam:要传递给U程函数的参?/p>
nPriority:要启动的U程的优先,默认优先UؓTHREAD_PRIORITY_NORMAL(普通优先),关于U程
优先U的详细说明请参考Platform SDK SetThreadPriority函数说明nStackSize:新线E的堆栈大小,如果讄?,则用默认大?在应用程序中一般情况下U程的默认堆栈大?br> ?M
dwCreateFlags:U程创徏标志,该参数可以指定ؓ下列标志
CREATE_SUSPENDED:以挂h式启动线E?如果你在U程启动之前惛_始化一些CWinThreadcM的一些成员变?br> 比如:m_bAutoDelete或者你的派生类中的成员变量,当初始化完成之后,你可以用CWinThreadcȝResumeThread
成员函数来恢复线E的q行
如果把该标志讄?,则表C立卛_动线E?br>lpSecurityAttrs:指向安全描述W的指针,如果使用默认的安全别只要讲该参数设|ؓNULL可以了!上面是AfxBeginThread函数的简单说?我们在用的时候一般情况下只要指定前两个参?其他
参数使用默认值就可以.?的确,使用h是很?只要q个函数一被调?创Z一个线E?
但是大家有没有想q?AfxBeginThread函数I竟是如何启动的U程?它的内部是如何实现的?下面我们来看一下AfxBeginThread函数的内部实?/p>
//启动workerU程
CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority, UINT nStackSize, DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs)
{
#ifndef _MT
pfnThreadProc;
pParam;
nPriority;
nStackSize;
dwCreateFlags;
lpSecurityAttrs;return NULL;
#else
ASSERT(pfnThreadProc != NULL);CWinThread* pThread = DEBUG_NEW CWinThread(pfnThreadProc, pParam);
ASSERT_VALID(pThread);if (!pThread->CreateThread(dwCreateFlags|CREATE_SUSPENDED, nStackSize,
lpSecurityAttrs))
{
pThread->Delete();
return NULL;
}
VERIFY(pThread->SetThreadPriority(nPriority));
if (!(dwCreateFlags & CREATE_SUSPENDED))
VERIFY(pThread->ResumeThread() != (DWORD)-1);return pThread;
#endif //!_MT)
}//启动UIU程
CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass,
int nPriority, UINT nStackSize, DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs)
{
#ifndef _MT
pThreadClass;
nPriority;
nStackSize;
dwCreateFlags;
lpSecurityAttrs;return NULL;
#else
ASSERT(pThreadClass != NULL);
ASSERT(pThreadClass->IsDerivedFrom(RUNTIME_CLASS(CWinThread)));CWinThread* pThread = (CWinThread*)pThreadClass->CreateObject();
if (pThread == NULL)
AfxThrowMemoryException();
ASSERT_VALID(pThread);pThread->m_pThreadParams = NULL;
if (!pThread->CreateThread(dwCreateFlags|CREATE_SUSPENDED, nStackSize,
lpSecurityAttrs))
{
pThread->Delete();
return NULL;
}
VERIFY(pThread->SetThreadPriority(nPriority));
if (!(dwCreateFlags & CREATE_SUSPENDED))
VERIFY(pThread->ResumeThread() != (DWORD)-1);return pThread;
#endif //!_MT
}从上面的代码中可以看出AfxBeginThread所做的事情主要有以下几?
1.在heap中配|一个新的CWinThread对象(workerU程)
代码?CWinThread* pThread = DEBUG_NEW CWinThread(pfnThreadProc, pParam);
调用CRuntimeClassl构中的CreateObject函数创徏CWinThread对象
CWinThread* pThread = (CWinThread*)pThreadClass->CreateObject();
CRuntimeClass以及MFC相关cȝ内部实现,详情请参?br>《深入浅出MFC》侯捯2.调用CWinThread::CreateThread()q设定属?使线E以挂v状态?br>pThread->CreateThread(dwCreateFlags|CREATE_SUSPENDED, nStackSize,lpSecurityAttrs);
3.讑֮U程的优先权
pThread->SetThreadPriority(nPriority);4.调用CWinThread::ResumeThread
pThread->ResumeThread();
通过上面的说?我想大家对该函数到底在内部都做了什?应该有一个初步的了解?
对于VC老手来说,q篇文章可能q没有什么可M?但是对于初学者来?q是有一定的
价值的!
M,希望q篇文章能给各位一点点的帮?
WaitForSingleObject 的用?/font>
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );
参数 hHandle 是一个事件的句柄Q第二个参数 dwMilliseconds 是时间间隔。如果时间是有信L态返?/span> WAIT_OBJECT_0 Q如果时间超q?/span> dwMilliseconds g旉事gq是无信L态则q回 WAIT_TIMEOUT ?br>
hHandle 可以是下列对象的句柄Q?br>Change notification
Console input
Event
Job
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
WaitForSingleObject 函数用来?/font> hHandle 事g的信L态,当函数的执行旉过 dwMilliseconds p回,但如果参?/font> dwMilliseconds ?/font> INFINITE 时函数将直到相应旉事g变成有信L态才q回Q否则就一直等待下去,直到 WaitForSingleObject 有返回直才执行后面的代码。在q里举个例子Q?/font>
先创Z个全局 Event 对象 g_event:
CEvent g_event;
在程序中可以通过调用 CEvent::SetEvent 讄事g为有信号状态?/span>
下面是一个线E函?/span> MyThreadPro()
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
WaitForSingleObject(g_event,INFINITE);
For(;;)
{
………… .
}
return 0;
}
在这个线E函C只有讄 g_event 为有信号状态时才执行下面的 for 循环Q因?/span> g_event 是全局变量Q所以我们可以在别的U程中通过 g_event. SetEvent 控制q个U程?/span>
q有一U用法就是我们可以通过 WaitForSingleObject 函数来间隔的执行一个线E函数的函数?/span>
UINT CFlushDlg::MyThreadProc( LPVOID pParam ) 在这个线E函C可以可以通过讄 MT_INTERVAL 来控制这个线E的函数体多久执行一ơ,当事件ؓ无信L态时函数体隔 MT_INTERVAL 执行一ơ,当设|事件ؓ有信L态时Q线E就执行完毕了?/span>
{
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
{
}
return 0;
}
]]>