其实很早之前用过这个方法,只是很久没用,又生疏了。记录下来作为备忘。
ThreadPool.RegisterWaitForSingleObject和ThreadPool.QueueUserWorkItem都是ThreadPool类中的静态方法。
ThreadPool.RegisterWaitForSingleObject 有4个重载函数,都大同小异。
这里只演示一种方法的使用
public static RegisteredWaitHandle RegisterWaitForSingleObject( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, int millisecondsTimeOutInterval, bool executeOnlyOnce )
MSDN中的说明是:
注册一个等待 WaitHandle 的委托,并指定一个 32 位有符号整数来表示超时值(以毫秒为单位)。
说的比较模糊。我用自己的语言来叙述一下。
ThreadPool.RegisterWaitForSingleObject中必须传入一个WaitHandle,这个WaitHandle一旦接受到信号,或者没接收信号而超时了,则会调用WaitOrTimerCallback方法。这个超时时间由millisecondsTimeOutInterval设置的。如果超时时间设为-1,那么只要接受不到信号,那么一直WaitOrTimerCallback则一直不会运行。该方法不会阻塞线程,只是在线程池上开启一个线程来处理回调。
executeOnlyOnce的值为true/false。如果为 true,表示在调用了委托后,线程将不再在 waitObject 参数上等待;如果为 false,表示每次完成等待操作后都重置计时器,直到注销等待。
注意,WaitOrTimerCallback 委托 签名如下:
[ComVisibleAttribute(true)] public delegate void WaitOrTimerCallback( Object state, bool timedOut )
这个委托运行的时候,Object state参数就是RegisterWaitForSingleObject方法中传入的Object state,timedOut参数就是等待是否超时,如果RegisterWaitForSingleObject方法中的超时时间是10s,那么在10s后,WaitHandle还未收到信号,则为true,反之则反。
下面演示一段代码。
static void Main(string[] args) { Console.WriteLine(DateTime.Now.ToLongTimeString() + " Main Thread start " + " threadID: " + Thread.CurrentThread.GetHashCode()); AutoResetEvent are = new AutoResetEvent(false); RegisteredWaitHandle waithandle = ThreadPool.RegisterWaitForSingleObject(are, (o, t) => { string s = (string)o; Console.WriteLine(DateTime.Now.ToLongTimeString() + " callback dosomething " + " threadID:" + Thread.CurrentThread.GetHashCode()); Console.WriteLine(DateTime.Now.ToLongTimeString() + " TimeOut:" + t.ToString()); }, "state", 2 * 1000, true); Console.WriteLine(DateTime.Now.ToLongTimeString() + " Main Thread did someting "); are.Set(); Thread.Sleep(2000); Console.WriteLine(DateTime.Now.ToLongTimeString() + " end"); }
运行结果如下:
RegisterWaitForSingleObject中的WaitOrTimerCallback方法是一个拉姆达表达式,超时时间为2秒。运行后可以看到主线程ID是1,WaitOrTimerCallback的线程ID是4,也证明了这个回调是在其他线程(线程池线程)中做的。 代码中Thread.Sleep(2000);如果不加入的话,可能主线程运行完毕,回调方法还未来得及运行。TimeOut为False。
如果在are.Set(); 前面加上一句等待Thread.Sleep(3000);那么TimeOut为True,因为等3秒再给出信号已经超时了。
如果把RegisterWaitForSingleObject中的参数executeOnlyOnce设为false,那么方法中的回调会重复执行。(把主线程中的 Thread.Sleep改为5000;)得到的结果如下:
可以看到,回调首次不超时,而接下来在主线程结束之前,会有2次超时导致的调用。因此,这个方法也可用作计时器。微软的文档中,建议:
此方法返回的 RegisteredWaitHandle 使用完毕后,请调用其 RegisteredWaitHandle.Unregister 方法来释放对等待句柄的引用。 我们建议始终调用 RegisteredWaitHandle.Unregister 方法,即使将 executeOnlyOnce 指定为 true 也是如此。 如果调用 RegisteredWaitHandle.Unregister 方法而不是取决于注册的等待句柄的终结器,则垃圾回收的工作效率更高。
本文出自 "一只博客" 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/1538794
创业找投资,你要警惕的三种人---情商培养
Jackzhai
在美国的硅谷,只要你有好的idea,不用你懂财务,不用你懂市场,有专业的公司帮助你,有风险投资支持你…你是创业者,你只需要做好你的技术,你有真材实料,就经得住市场的磨练。因此,美国硅谷成为世界上最大的创新者摇篮,是个令我们羡慕的地方。
目前的中国,这还是比较遥远的梦。想要白手起家,需要你懂技术、懂财务、懂管理、懂经营…关键的是你要懂得与千奇百怪的投资人、各式各样的管理机构打交道,你的智商要高,你的情商更要高。当然,相信你这样的"全能",应该没有时间再在技术上有什么作为了。
中国改革开放超过35年多了,有钱的人确实很多。会有很多人跟你说:钱不是问题,就是没有好的case;有关系的人也很多,会有很多人跟你说:某某是我爸,某某是我哥们,只要你有赚钱的法子,批文、政策都不是问题……
但是,有过房地产行业的疯狂之夜,有过炒黄金的过山车,有过互联网企业的烧钱游戏……人人都学会了什么是淡定。面对天天的骚扰电话,你不再是无奈,而是一种超脱……卖保险的找你,生命最重要,送给你的是健康;卖传销的找你,加入吧,你就要成为成功人士啦;卖理财的找你,投资吧,你不理财,财不理你……
都市生活的现代人,生活节奏越来越快,人变得越来越浮躁。做事喜欢立竿见影;投资希望立刻盈利;吃饭都不再是为了肚子不饿,而是吃玩这顿,就想下顿吃啥,吃饭是一种活动、一种工作、一种负担。人们越来越变得更加实际,关注的只是结果,而不再去享受过程。
国内的投资环境应该说是很不好!
在具备了好的Idea之后,睁大眼睛,多花些时间,选择一个满意的,起码是职业一些的投资合伙人。这对于先研发、再市场的创业者来说,尤为重要。有道是:蛋糕做出来了,怎么分,是谁多谁少的问题;蛋糕没做出来,大家肯定是什么也分不到的。
有三类"杀手式"的投资合伙人,是创业者要仔细筛选的,选择失误,最后往往是公司"死"在内耗上,而不是所谓的技术风险、市场风险上。
1、找投资的人,不要找投机的人:
投资是看好你的项目,愿意投钱给你,让你有机会做成这件事。当然,绝大多数的人,最后都是说,看中你的项目只是其次,最重要的是看中你的人,你的能力,你的人品…
投机与投资只差一字,但其目的是完全不同的。投资是希望从你的成功中一起获益。投机是为了快速获利,多半是因为他认为这件事,或你这个人,可以炒作。说得直接一些,他可以把你卖个好价钱,能快速高价出手是关键,他挣钱的方式就是对你的包装。
一般开始就说能帮你上市如何的,多半是这类人;他们熟悉上市"骗"股民的钱是如何容易,你做什么,对他们来说都只是个噱头,只要能吸引公众的引眼球就行了,至于你的idea是否有价值,他才不管呢。其实做传销的人,这种心理是最为明显的。
投机的人多半处于几种目的:
-
快速挣钱:现代金融业的"高度"发达,玩资金的远远好于玩实业的,他们挣钱过于容易,利用大资金做杠杆,垄断市场,哄抬物件。这几年的"豆你玩"、"蒜你很"、"姜你军"…大多是这些人干的;
-
上市套现:利用大家对高科技的偏好,进行商业炒作。由于监管不严,公司上市就如同股市圈钱,他们缺的就是一个高科技的名字,技术是什么,他们也很少关注。公司上市,投资者与所谓创业者都套现走人,剩下股市一堆"垃圾",让股民去消化;
其实,互联网行业是烧钱的行业,使用投机者资金的也大有人在。但一个铁的规律是:你必需在资金断链之前,找到下一个投资人。吸引这类投资人的最好方法不是你的技术多高,你的创意多好,而是你的故事讲得多好。
2、找职业的人,不要找跟着感觉走的人
创业是一件比耐心、比毅力的事情,需要对可能遇到的问题,有充分的准备,需要有足够的耐心、毅力,与你一起去迎接每一个挑战。跟踪感觉走,容易感情用事的人,都容易在困难面前惊慌失措,撤退逃跑。
生意场上有这样一种人常令人头痛:谈生意时,什么都说好,谈合约时,主要是谈兄弟感情。他们常说的口头禅是:一起做事,不是为了赚钱,就是为了哥们之间的感情。
他们在谈合同时,什么条款都无所谓,甚至严重的还直接宣称,合同是没有的,他不相信合同,签了约也可以随时撕毁,他只相信兄弟感情,感情在,生意就在。
值得注意到是:他们在签约之后,执行合同的时候会比较麻烦。因为对业务合同细节不关注,执行时,根本不按约定条款执行,而是他认为怎么样就要怎么样。
因此,容易谈的生意不好做,好做的生意不容易谈。
还有一种人是在管理上跟踪感觉走的人,与他们合作也是很棘手的。
公司不是没有规矩,但所有的规矩对他都不生效。他不是说不建立流程制度,但所有的流程随时根据他的需要去调整。当他是你的领导时,你甚至不知道该如何跟他汇报工作,你必须猜测他的真实想法,占用很大的精力去"理解"他,否则,你和他如同两个车辙里跑的车,总是较劲,而不是一起向前使劲。
他的情绪变化很重要,高兴时你的请示很容易通过,生气时请示无异于直接撞墙。这是不是有些"伺候"皇上的意思啊,想与这样的人处得很融洽,和绅是你最好的老师。
不幸的是,国内"儒家"思想影响多年,论资排辈的管理很流行,跟着感觉走的管理者也确实很多。很多人并非天生如此(毕竟没有天生做太子的条件),"多年的媳妇熬成婆",很多人是自己创业成功了,或者成长到一定的级别就变成这样啦。
3、找相信你的人,不要找喜欢看着你的人
投资给你,当然要相信你,否则那么大一笔钱就让你花吗?投资人的钱也不是大风刮来的,想要挣钱的急迫心情肯定比你还要强。
除非投资者是你爸爸,否则对你的相信程度一定是有折扣的。这时,职业的投资人很会处理,合理的监督与控制,弥补你管理、市场等方面的不足,让你充分绽放创业者的激情,形成强有力的核心团队,创业成功的可能性就越大,投资人的风险就越小。
但很多投资人并非这么职业,对他们来讲,最安全的监管就是干脆自己管,实际上,你成了有"创业股份"的打工者。如果投资人对你做行业再不是很熟悉,凭着他的想象制定市场战略,处理开发计划,进行市场销售…如果效果很好的话,你认为不是老天过于照顾你吗?
有一些企业管理者喜欢这样一种管理模式:爱厂如家。
我曾经见过一个企业的老板,每天早上7:30在单位吃早餐,基本上是高层地碰头会,晚上8:00晚餐就是当天的工作总结会,交流生活,讨论工作,气氛温馨而充满了家的味道;这种方式对于吃住在工厂的人来说,也算不错,但对于在都市居住的人来讲,上班路上的平均时间是一个小时,这样的做法的确让人有些痛苦。现在通讯手段非常发达,不见面也可以实时在线,邮件、手机、微信… 其实24小时工作已经成为这类管理者的典型工作方式。
领导非常敬业,作为高层、中层的管理者,你理所应当地敬业。但他所理解的敬业往往就是"看见"你在工作。当你出差或者外出时,他会很"失落",你最好主动及时汇报与请示。重要的是:你最好不要有自己的想法,即使有自己的想法,最好也设法变成他的想法说出来,否则这个想法变成现实就将命运坎坷。
换个说法:这样的人喜欢管理得非常仔细,不善于授权,他们需要的是工作助手,不是中层管理者。其实说得直接一些:他们还是骨子里对你不够信任。
不信任的原因可能不同:一种是对你的能力缺乏信任,你能否做得满意他是有疑虑的。实时"看着"你,对你做的事情充分了解,是掌控事情结局的最好方法;另一种是对你本身就是不信任,认识时间短,没有共患难的经历…让自由地花钱,做事,他当然不放心。
缺乏信任是创业者与投资人之间最为常见的,建立信任机制是非常必要的。运用合理的管理监控机制,而不是天天看着你,使得你缩手缩脚,难以施展。
目前管理流行的"预算制",在计划预算内的事情,充分放手,让你去做,超出计划预算的,大家协商解决。大家一起制定的计划预算,制
没有评论:
发表评论