61阅读

中和反应及在实际中的应用-解析京东的大数据在运营中的实际应用

发布时间:2017-12-23 所属栏目:delegates

一 : 解析京东的大数据在运营中的实际应用

京东大数据的优势得益于京东电商业务的全价值链数据。由于京东的主要业务是自营式电商,而且要求端到端的流程控制,使得京东的大数据覆盖了电商的全部流程,从采购、库房、销售、配送到售后、客服,整个链条是完整的。

分分合合的大数据路线

京东大数据说来话长,实际上,它经历了一个分分合合的过程。

2009年7月的时候,邢捕头的心情可没有现在轻松。那个时候,快速增长的业务带来了海量的数据需求,业务部门扔过来大量的数据,几乎天天到他那里来“讨账”。于是京东数据部在2009年底正式成立。

到了2010年下半年,数据部依照服务职能对象的不同拆分为两个团队,其中一个主要面向采销、市场等部门,另一个数据团队则为仓储、物流等部门提供服务。

巧合的是,这两支团队也选择了不同的技术路线。一个选择了基于开源的MySQL自建数据仓库,自主开发配套的数据调度生产、数据分析提取、数据知识管理、数据报表呈现及数据质量监控的产品体系,并建设相应的数据集市与业务部门联合推广使用。

另一个数据团队选择了购买ORACLE RAC小型机/ORACLE BIEE商业智能平台,数据处理效率也得到了明显提高。

但是随着京东业务的不断扩张和高速增长,商业软件的局限性就日益显露出来了,主要表现在两个方面:

一个是维护成本高,商业软件此后的每一次升级都要请原厂的专家上门,这个服务费可是相当的高。

另一个更重要的则是快速响应能力。电商行业变化非常快,几乎每天业务部门都要做一些策略调整,比如增加某些品类,砍掉另一些品类,而商业软件都是模块化的,并没有那么强的灵活性,响应速度根本跟不上业务的发展。实际上,我们看到一些使用了商业软件的电商在这个方面吃亏不小。

到了2012年年初,为了更好地应对业务的快速增长,京东数据部又合在了一起,并且确定了基于Hadoop的分布式开源技术架构,原来的SQL Server和ORACLE数据仓库均退出了历史舞台。在Hadoop的基础上,京东开发出了JDW企业级数据仓库,目前集群的总存储量已经达到了50PB以上,是名副其实的大数据。
201512994753957.jpg (600×313)

更加真实有效的大数据

在贵阳大数据博览会上,出任京东集团高级副总裁及京东研发体系负责人的张晨表示:“京东全品类、全价值链的电商数据在行业内具有稀缺性,它使得京东大数据在数据、模型、技术、工具等多个层面高度的整合和统一,大大提升了大数据在整个集团内融合和利用的效率,促进大数据的深度价值挖掘。”

简单来讲,京东大数据的优势得益于京东电商业务的全价值链数据。由于京东的主要业务是自营式电商,而且要求端到端的流程控制,使得京东的大数据覆盖了电商的全部流程,从采购、库房、销售、配送到售后、客服,整个链条是完整的。

“数据不仅仅大才有价值,如果不完整或者只是局限于某个点的话,价值就小了。京东的数据很完整,量又很大,这个数据就很值钱。”邢捕头认为。

而且由于京东对商品交易过程实行严格的管控,在京东平台上进行代购和刷单的行为都是不允许的,这也使得京东的用户数据更加接近真实用户的真实需求。

有了真实有效的大数据,京东就可以做很多的事情,比如精准营销、用户画像、C2B定制,等等。

以老冀为例,比如老冀想在京东上买本《从零到一》,结果正好这本书脱销,老冀于是点击了一下“到货提醒”。过了几天,老冀收到一封邮件,告诉老冀这本书已经到货了,并且还推荐了《奇点临近》、《创业者的思考》,老冀发现这两本也是自己想要的书,于是照单全收。

不过,老冀感觉京东每次登陆的主页面还是非常庞杂,似乎不如美国亚马逊那么简洁、个性化和有针对性。邢捕头坦诚,目前京东在A/B 测试方面还不如亚马逊成熟。所谓A/B 测试,就是先建立一个测试页面,这个页面在呈现逻辑和内容上与原有页面有所不同,然后将这两个页面以随机的方式同时推送给所有浏览用户,接下来分别统计两个页面的用户转化率,即可了解到两种策略的优劣。还有一个也是跟中国网民的购物习惯相关:大部分美国网民购物非常直接,而中国网民则喜欢那种“逛”的感觉。
201512994810833.jpg (638×1595)

大数据还有个很大的作用,就是用户画像。前面老冀谈到京东有个很独特的优势,就是数据更加真实可靠。而且经过了十多年的发展,京东的商品品类也已经非常丰富,目前已经有接近1亿SKU。很多商品本身就会有用户特征,比如女士的胸罩和内衣,男士的刮胡刀,等等。京东根据这些购买行为给用户打上标签,直至勾画出一幅清晰的用户画像。

有了用户画像,京东就可以做很多事情了。举个例子,根据用户在下单前的浏览情况,京东就可以了解用户的购物性格是冲动型、理性型还是犹豫型。对于冲动型用户,京东直接推荐给Ta最畅销的同类商品,而理性型用户则推荐给Ta口碑最好的商品。

京东还将用户画像数据提供给网站智能机器人JIMI,使得JIMI能够快速理解用户意图、从而对用户进行个性化关怀,从而大幅度提升用户的满意度。
201512994824497.jpg (638×1595)

而随着2014年京东收购了腾讯的实物电商部门,并将其数据整合进来,京东大数据的准确性又得到了提升。此外,京东的大数据还能够与腾讯的QQ/微信大数据结合起来,从而开展更有针对性的营销活动。从过去一段时间双方的联合推广来看,大数据功不可没。

帮助业务部门决策

其实,大数据还能够做更多的事情。对于邢捕头所在的部门来说,最重要的还是帮助业务部门更好地决策。

比如目前市面上有那么多款手机,京东手机采销部门到底应该采购哪一款手机?就可以根据京东大数据参考决策。如今,京东更深入了一步,在2013年推出了JDPhone计划,与手机厂商一起打造用户喜欢的手机。

举个例子:京东大数据显示,近半年来在京东购买过两次以上手机的用户,其中34%都选择了更大屏幕,但是5.5寸是他们接受的极限,因此建议手机厂商选择4.8-5.5寸屏幕作为最优尺寸。最近这几年,正是基于大数据的威力,JDPhone计划先后与中兴、华为等手机制造企业合作,推出了目前市场上很多畅销的机型

“我们的数据能够帮助业务人员做决策和判断,能够利用很多统计方式展现报表,以更加形象、实时和统一的方式提供给他们,通过业务应用服务于我们的消费者。”邢捕头对于自己的工作感到非常自豪。

2011年11月,京东准备对快递包裹收费。那么,当用户的订单金额到了多少才能够不收费呢?为此,京东大数据部门模拟了一个场景,分别按照用户订单免运费下限为19元、29元到89元之后,对京东的整体毛利情况做了一个详细的测算,然后找到了比较合理的价格区间,将报告提交给了公司高层,对于配送费的合理制定起到了很好的辅助决策作用。

如今,对于京东高达上亿的SKU,单是补货就是个大问题,如果只是依靠人工补货根本就忙不过来。京东供应链研发团队自主开发了一套补货系统,项目上线之后,给图书部门的采购补货工作带来了极大的便利。面对超过百万而且不断增长的SKU,图书业务部门的采购人员并没有显著增加

此外,京东还将自己的大数据拿出来,与复旦大学联合推出了复旦-京东信息消费指数,包括消费者行为与信心指数、电子商务行业景气度指数、电子商务便利度指数三大子指数,共同构成了一个完善的指标体系,综合反映了当前信息经济消费情况,能够为政府政策、行业发展、消费者行为模式等提供重要的参考价值。这也是目前我国首个用于评估电子商务、“互联网+”等信息要素集聚程度以及绩效表现的综合性指数。

  大数据下的智慧供应链
 
  随着网络和信息技术的不断发展,人类产生的数据量正在呈指数级增长,云计算的诞生更是直接把我们带了大数据时代。“大数据”作为时下最时髦的词汇,开始向各行业渗透辐射,颠覆了传统行业的管理和运营思维,更拨动着电商行业管理者的神经,大数据在电商行业释放出的巨大价值已越来越被人熟知与接受。
 
  “可能你的数据以前只看未来一周就可以,现在看两周,未来想看两年的数据,这时候大数据作为一种技术可以支撑你。然而大数据也好、云计算也好,所有的东西如果没有生意人直接的参与和深度理解,以及未来深度地使用,那么所有的这些用现代的词来说就是然并卵。”京东零售平台产品机构负责人翟松涛在《大数据驱动京东智慧供应链》的分享中如是说,她从销售预测、库存管理、可视化、选品及动态定价等供应链环节讲述了大数据的神奇运用。

 作为自营电商,库存是供应链中重要的组成部分。翟松涛首先介绍了京东运用大数据在库存管理上取得的成果。作为枢纽环节,销量预测决定了后边运营所有的相关配合,“过去5年里,京东从只有20万的自营商品到今天有将近500万自营商品,我们做了很多相应的事情。通过清洗数据得到针对每一个单品的需求的形式。对于这些单品我们匹配相应的算法和模型,预测未来这个商品可能会产生的销量。”
 
  翟松涛重点提到京东在做销量预测的大数据分析流程中加入业务思路,销量预测第一个支撑到的就是补货建议。根据销量的预测在京东的仓库、配送站点等提前布货,当用户定单需求来的时候,保证在离他最近的仓库里已经有货。
 
  在库内补货方面,京东的仓储系统会接受销量预测的建议,按照未来销量可能产生的时间,把货物从补货区送到捡货区。各仓库间也有自动化支援关系,避免配入仓的冗余和缺货。
 
  在传统的供应链中普遍存在一种“牛鞭效应”,即供应链上的信息流从最终客户向原始供应商端传递的时候,由于无法有效地实现信息的共享,使得信息扭曲而逐渐放大,致使需求信息出现越来越大的波动,最终导致供应链失调,出现供应商货物积压、或零售商出现缺货等现象。面对这些问题,京东选择与供应商共命运——供应商深度协同,将供应链协作进一步延伸到生产环节。这方面翟松涛带来了一个京东成功的实践案例。8月份京东与美的达成战略合作关系,双方在物流配送、大数据分析、智能设备等方面进行深度合作,先后上线了系统直连、深度协同等项目,实现基础订单数据及销量库存数据共享,实现供应链深度协同。深度协同的不同之处就在于把销量预测时间延长,根据未来三个月的预测销量与供应商协调生产计划,厂商根据预测安排生产周期,在整个实践过程中,京东实现了降低缺货风险、降低库存周转、提高数据共享效率的三大优化效果,而美的则实现了生产计划预测性加强、智能补货的优化效果。这对于电商,尤其是自营电商来说未来是一个很明确的趋势。
 
  不仅如此,京东还为供应商、厂商带来了一款称为“零售罗盘”的产品,用户可以通过可视化界面点击直接进入操作流程,通过消费者分析、竞品分析甚至品类分析等判断下一步生产制造的方向,为厂商带来价值,受到战略合作伙伴的广泛关注。
 
  根据线上线下数据自动推送选品建议,为采销提供选品依据的“智慧选品”、根据单品特质形成的不同竞争力计算价格的“动态定价“等,翟松涛也一一作了介绍,都为京东日常运营、促销提供了不少分析思路。
 
  对于京东的技术革新来说,其雄厚的技术基础和完善的技术体系、前瞻性的业务部署以及京东本身渴求为用户带来优质体验的理念都成为其技术前进的驱动力。而对于这样一个非传统企业,其发展据点落实在技术之上,着实是稳健的选择。可以说,云计算与大数据大大改变了电商的营运之路,也为中国市场的“互联网+”时代做足充分准备。

二 : Delegates 和 Events 在unity中的使用

如何创建和使用委托Delegates 以提供复杂和动态功能在您的脚本上。

DelegateScript .cs

using UnityEngine;using System.Collections;public class DelegateScript : MonoBehaviour { delegate void MyDelegate(int num); MyDelegate myDelegate; void Start () { myDelegate = PrintNum; myDelegate(50); myDelegate = DoubleNum; myDelegate(50); } void PrintNum(int num) { print (Print Num: + num); } void DoubleNum(int num) { print (Double Num: + num * 2); }}

MulticastScript.cs

using UnityEngine;using System.Collections;public class MulticastScript : MonoBehaviour { delegate void MultiDelegate(); MultiDelegate myMultiDelegate; void Start () { myMultiDelegate += PowerUp; myMultiDelegate += TurnRed; if(myMultiDelegate != null) { myMultiDelegate(); } } void PowerUp() { print (Orb is powering up!); } void TurnRed() { renderer.material.color = Color.red; }}

如何创建一个动态的broadcast广播系统,使用事件。

EventManager.cs

using UnityEngine;using System.Collections;public class EventManager : MonoBehaviour { public delegate void ClickAction(); public static event ClickAction OnClicked; void OnGUI() { if(GUI.Button(new Rect(Screen.width / 2 - 50, 5, 100, 30), Click)) { if(OnClicked != null) OnClicked(); } }}
TeleportScript.cs
using UnityEngine;using System.Collections;public class TeleportScript : MonoBehaviour { void OnEnable() { EventManager.OnClicked += Teleport; } void OnDisable() { EventManager.OnClicked -= Teleport; } void Teleport() { Vector3 pos = transform.position; pos.y = Random.Range(1.0f, 3.0f); transform.position = pos; }}
TurnColorScript.cs
using UnityEngine;using System.Collections;public class TurnColorScript : MonoBehaviour { void OnEnable() { EventManager.OnClicked += TurnColor; } void OnDisable() { EventManager.OnClicked -= TurnColor; } void TurnColor() { Color col = new Color(Random.value, Random.value, Random.value); renderer.material.color = col; }}

扩展:superdelegates / delegates / pledged delegates

三 : 动能定理在实际问题中的应用

动能定理在实际问题中的应用

动能定理在高中物理中占有重要的地位,是学生学习的重点又是难点。[www.61k.com]掌握动能定理的解题方法,是学好高中物理的基础。它能有效地拓展学生的解题方法,对学生思维的能动性的提高起着举足轻重的作用。下面从几个方面谈一下动能定理在实际中的具体应用。
一、应用动能定理的一般思本文由论文联盟 www.61k.com 收集整理维程序:
1.确定研究对象,进行受力分析,认真画出受力分析示意图;
2.若问题中涉及到F、s 、v 、m 等物理量,考虑用动能定理;
3.确定研究的物理过程(起点和终点),分析这过程中有哪些力对研究对象作功,做了多少功,正功还是负功,求出总功;
4.确定研究过程起点和终点的动能,列出动能定理表达式;
5.求解,必要时讨论结果的合理性。
二、常规题(匀变速直线运动)
例1 用拉力F使一个质量为m的木箱由静止开始在水平冰道上移动了s,拉力F跟木箱前进的方向的夹角为α(如图1),木箱与冰道间的摩擦因数为μ,求木箱获得的速度?

由动能定理列方程得

三、多过程问题
例2 铁球从1m高处掉入沙坑,则已知铁球在下陷过程中受到沙子的平均阻力为铁球重力的20倍(如图2),则铁球在沙中下陷深度为多少?

解法一:分段列式
自由下落:■
沙坑减速:■
解法二:全程列式 ■
四、求变力做功问题
例3 一颗质量m=10g的子弹,以速度v=600m/s从枪口飞出,子弹飞出枪口时的动能为多少?若测得枪膛长s=0.6m,则火药引爆后产生的高温高压气体在枪膛内对子弹的平均推力多大?
由动能定理列方程得

五、求解曲线运动问题
例4 某人从距地面25m高处水平抛出一小球,小球质量100g,

动能定理的应用 动能定理在实际问题中的应用

出手时速度大小为10m/s,落地时速度大小为16m/s,取g=10m/s2,试求:
(1)人抛球时对小球做多少功?
(2)小球在空中运动时克服阻力做功多少?
对不同的过程利用动能定理列方程得
人抛球的过程:■
球在空中的过程:■
列式时要注意W合和ΔEK的正负
六、多过程问题
例6 如图3所示,质量为1kg的木块(可视为质点)静止在高1.2m的平台上,木块与平台间的动摩擦因数为0.2,用水平推力20N使木块产生位移3m时撤去,木块又滑行1m时飞出平台,求木块落地时速度的大小?

全过程列式:

当然,动能定理的应用范围很广,远不止这些例子。[www.61k.com)适用于直线、曲线、恒力、变力,解题简洁方便,只有灵活掌握,才能发挥主观能动性,提高学习物理的兴趣,使能动性得以发挥。

四 : 线程中CreateEvent和SetEvent及WaitForSingleObject的用法

首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.

CreateEvent

函功能描述:创建或打开一个命名的或无名的事件对象.

EVENT有两种状态:发信号,不发信号。

SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。

WaitForSingleObject()等待,直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,

也可以是其它内核对象。

当你创建一个线程时,其实那个线程是一个循环,不像上面那样只运行一次的。这样就带来了一个问题,

在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用

事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,

它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果

满足就退出线程,不满足就继续运行。当在线程里运行阻塞的函数时,就需要在退出线程时,先要把阻塞

状态变成非阻塞状态,比如使用一个线程去接收网络数据,同时使用阻塞的SOCKET时,那么要先关闭

SOCKET,再发送事件信号,才可以退出线程的。

当然我感觉重要应用方面还是用来锁定,实现所谓的pv功能。

下面介绍函数功能,参数等

1.CreateEvent

函数功能描述:创建或打开一个命名的或无名的事件对象

函数原型:

HANDLECreateEvent(

LPSECURITY_ATTRIBUTESlpEventAttributes, // 安全属性

BOOL bManualReset, // 复位方式

BOOL bInitialState, // 初始状态

LPCTSTR lpName // 对象名称

);

参数:

lpEventAttributes:

[输入]一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果

lpEventAttributes是NULL,此句柄不能被继承。

WindowsNT/2000:lpEventAttributes的结构中的成员为新的事件指定了一个安全符。如果

lpEventAttributes是NULL,事件将获得一个默认的安全符。

bManualReset:

[输入]指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来

手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自

动将事件状态复原为无信号状态。

bInitialState:

[输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。

lpName:

[输入]指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之

内。名字是对大小写敏感的。

如果lpName指定的名字,与一个存在的命名的事件对象的名称相同,函数将请求EVENT_ALL_ACCESS

来访问存在的对象。这时候,由于bManualReset和bInitialState参数已经在创建事件的进程中设置,这

两个参数将被忽略。如果lpEventAttributes是参数不是NULL,它将确定此句柄是否可以被继承,但是其

安全描述符成员将被忽略。

如果lpName为NULL,将创建一个无名的事件对象。

如果lpName的和一个存在的信号、互斥、等待计时器、作业或者是文件映射对象名称相同,函数将

会失败,在GetLastError函数中将返回ERROR_INVALID_HANDLE。造成这种现象的原因是这些对象共享同一

个命名空间。

终端服务(TerminalServices):名称中可以加入"Global/"或是"Local/"的前缀,这样可以明确的

将对象创建在全局的或事务的命名空间。名称的其它部分除了反斜杠(/),可以使用任意字符。详细内容

可参考KernelObject Name Spaces。

Windows 2000:在Windows2000系统中,没有终端服务运行,"Global/"和"Local/"前缀将被忽略

。名称的其它部分除了反斜杠(/),可以使用任意字符。

Windows NT 4.0以及早期版本, Windows95/98:名称中除了反斜杠(/),可以使用任意字符。

返回值:

如果函数调用成功,函数返回事件对象的句柄。如果对于命名的对象,在函数调用前已经被创建

,函数将返回存在的事件对象的句柄,而且在GetLastError函数中返回ERROR_ALREADY_EXISTS。

如果函数失败,函数返回值为NULL,如果需要获得详细的错误信息,需要调用GetLastError。

备注:

调用CreateEvent函数返回的句柄,该句柄具有EVENT_ALL_ACCESS权限去访问新的事件对象,同时

它可以在任何有此事件对象句柄的函数中使用。

在调用的过程中,所有线程都可以在一个等待函数中指定事件对象句柄。当指定的对象的状态被置

为有信号状态时,单对象等待函数将返回。

对于多对象等待函数,可以指定为任意或所有指定的对象被置为有信号状态。当等待函数返回时,

等待线程将被释放去继续运行。

初始状态在bInitialState参数中进行设置。使用SetEvent函数将事件对象的状态置为有信号状态

。使用ResetEvent函数将事件对象的状态置为无信号状态。

当一个手动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至

明确调用ResetEvent函数将其置为无符号状态。

当事件的对象被置为有信号状态时,任意数量的等待中线程,以及随后开始等待的线程均会被释放

当一个自动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至

一个等待线程被释放;系统将自动将此函数置为无符号状态。如果没有等待线程正在等待,事件对象的状

态将保持有信号状态。

多个进程可持有同一个事件对象的多个句柄,可以通过使用此对象来实现进程间的同步。下面的对

象共享机制是可行的:

·在CreateEvent函数中,lpEventAttributes参数指定句柄可被继承时,通过CreateProcess函数

创建的子进程继承的事件对象句柄。

·一个进程可以在DuplicateHandle函数中指定事件对象句柄,从而获得一个复制的句柄,此句柄

可以被其它进程使用。

·一个进程可以在OpenEvent或CreateEvent函数中指定一个名字,从而获得一个有名的事件对象句

柄。

使用CloseHandle函数关闭句柄。当进程停止时,系统将自动关闭句柄。当最后一个句柄被关闭后

,事件对象将被销毁。

使用环境:

Windows NT/2000:需要3.1或更高版本

Windows 95/98:需要Windows95或更高版本

头文件:定义在Winbase.h;需要包含Windows.h。

导入库:user32.lib

Unicode:在Windows NT/2000中,以 Unicode 和 ANSI执行

一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle()

来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent()

来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待

其变为有信号.

PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event

对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.

对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于

人工复位的Event对象,它释放所有等待的thread.

2. WaitForSingleObject的用法

WaitForSingleObject的用法

DWORDWaitForSingleObject(

HANDLEhHandle,

DWORDdwMilliseconds

);

参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回

WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。

hHandle可以是下列对象的句柄:

Changenotification

Consoleinput

Event

Job

Memory resourcenotification

Mutex

Process

Semaphore

Thread

Waitabletimer

WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返

回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一

直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子:

先创建一个全局Event对象g_event:

CEventg_event;

在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。

下面是一个线程函数MyThreadPro()

UINTCFlushDlg::MyThreadProc( LPVOID pParam )

(www.61k.com]{

WaitForSingleObject(g_event,INFINITE);

For(;;)

{

………….

}

return 0;

}

在这个线程函数中只有设置g_event为有信号状态时才执行下面的for循环,因为g_event是全局变量,所

以我们可以在别的线程中通过g_event.SetEvent控制这个线程。

还有一种用法就是我们可以通过WaitForSingleObject函数来间隔的执行一个线程函数的函数体

UINTCFlushDlg::MyThreadProc( LPVOID pParam )

{

while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)

{

………………

}

return 0;

}

在这个线程函数中可以可以通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信

号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了(return0)。

本文标题:中和反应及在实际中的应用-解析京东的大数据在运营中的实际应用
本文地址: http://www.61k.com/1162081.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1