锘??xml version="1.0" encoding="utf-8" standalone="yes"?>这里只有视频精品,亚洲清纯自拍,欧美jizzhd精品欧美巨大免费http://m.shnenglu.com/xingmuxixi/category/3298.htmlzh-cnTue, 15 Jul 2008 06:27:50 GMTTue, 15 Jul 2008 06:27:50 GMT60C++鍩烘湰綾誨瀷瀵硅薄鍖栫殑涓涓柟妗?/title><link>http://m.shnenglu.com/xingmuxixi/articles/55796.html</link><dc:creator>閱掔洰瑗胯タ</dc:creator><author>閱掔洰瑗胯タ</author><pubDate>Thu, 10 Jul 2008 06:44:00 GMT</pubDate><guid>http://m.shnenglu.com/xingmuxixi/articles/55796.html</guid><wfw:comment>http://m.shnenglu.com/xingmuxixi/comments/55796.html</wfw:comment><comments>http://m.shnenglu.com/xingmuxixi/articles/55796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/xingmuxixi/comments/commentRss/55796.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/xingmuxixi/services/trackbacks/55796.html</trackback:ping><description><![CDATA[<p><strong>1.闂</strong><br> 鍦ㄥ緢澶氱敤C++寮鍙戞湇鍔″櫒浜у搧鏃訛紝闇瑕佸皢涓嶅悓鐨勬暟鎹被鍨嬪瓨鍌ㄥ埌涓涓鍣ㄤ腑(鏈夌偣綾諱技HttpSession鍙互淇濆瓨浼?xì)璇濇湡闂翠焕L剰綾誨瀷鐨勬暟鎹?錛屼緵鍏跺畠浣跨敤紼嬪簭鏌ユ壘銆?br> 鍦↗ava鍜孋#涓繖鏄竴涓畝鍗曠殑闂錛屽彲浠ヤ嬌鐢∣bject瀵硅薄鏉ュ疄鐜扮被鍨嬫棤鍏崇殑鏁版嵁緇撴瀯錛屽茍涓斿緢濂界殑瑙e喅浜?jiǎn)鍐呭瓨鍥炴敹绛夐棶棰樸?br> 浣咰++涓緢闅懼仛鍒拌繖涓鐐癸紝C++鏄竴闂ㄩ潤(rùn)鎬佺被鍨嬭璦錛屾病鏈変竴涓墍鏈夌被鍨嬬殑鍩虹被銆?/p> <p><br><strong>2.涓鑸柟娉?/strong><br> 涓鑸В鍐寵繖涓棶棰樼殑鍔炴硶鏄嬌鐢╲oid*鎸囬拡鏉ュ瓨鍌ㄦ暟鎹紝璞′笅闈㈢殑浠g爜錛?br> map<string,void*><br> 浣嗘槸榪欐牱甯︽潵鍑犱釜闂錛?br> 錛?錛夊洜涓篊++鍦ㄤ笉鐭ラ亾綾葷被鍨嬫椂鏃犳硶姝g‘鐨勯噴鏀懼唴瀛橈紱<br> 錛?錛夊緢澶氫嬌鐢ㄨ呬嬌鐢ㄥ畠鏃訛紝閲婃斁鍐呭瓨鐨勬椂鏈洪毦浜庣‘瀹氾紱</p> <p><br><strong>3.璁╁畠姝g‘閲婃斁鍐呭瓨</strong><br> 鎴戜滑鍙互瀹氫箟涓涓叕鍏辯殑鍩虹被錛岃鎵鏈夐渶瑕佹斁鍒板鍣ㄧ殑綾誨瀷緇ф壙瀹?br> class Object<br> {<br> public:<br>  virtual ~Object(){cout<<"Object Destroy" << endl;}<br> };<br> 鐢變簬浣跨敤浜?jiǎn)virtual鏋愭瀯鍑芥暟鍥犳鍙互紜繚delete obj鐨勬椂鍙互姝e父宸ヤ綔銆傚洜姝や笂闈㈢殑瀹瑰櫒瀹氫箟鍙樻垚浜?jiǎn)杩欐狓P細(xì)<br> map<string,Object*></p> <p><br><strong>4.璁╁畠鐭ラ亾浣曟椂閲婃斁鍐呭瓨</strong><br> 澶у閮界煡閬擄紝榪欐椂蹇呴』浣跨敤寮曠敤璁℃暟錛屼笉榪囧緢騫歌繍鏈夌幇鎴愮殑錛屾垜浠嬌鐢╞oost::share_ptr<br> map<string,boost::share_ptr<Object*> ><br> 寰堝ソ涓や釜闂閮藉凡緇忚В鍐籌紝浣嗗浣曞悜浠栦滑涓姞鍏++鐨勫熀鏈被鍨嬪憿錛?/p> <p><br><strong>5.寮鍙戝熀鏈被鍨嬬殑灝佽綾?/strong><br> 鍩烘湰綾誨瀷寰堝錛屽鏋滄瘡涓涓兘鍐欎竴涓被錛屽お绱簡(jiǎn)錛屾垜浠彲浠ュ畾涔変竴涓ā鏉匡紝榪欓噷鐨勯毦鐐規(guī)槸鍩烘湰綾誨瀷涔嬮棿鐨勬搷浣滅閲嶈澆錛屼笉鍚岀被鍨嬩箣闂寸殑榪愮畻榪斿洖鐨勭被鍨嬪茍涓嶇浉鍚岋紝榪欏氨闇瑕佸啓寰堝閲嶈澆鍑芥暟錛屽湪榪欓噷鎴戜滑浣跨敤Loki鏉ョ畝鍖栬繖浜涙搷浣溿備嬌鐢↙oki鐨凾ypeList鏉ヨ嚜鍔ㄨ綆楀簲璇ユ槸浠涔堣繑鍥炲?br> #include"Typelist.h" //Loki澶存枃浠?br> template <typename T><br> class PrimerType:public Object<br> {<br> public:<br>  typedef T value_type;//鍩烘湰綾誨瀷<br>  typedef PrimerType<T> class_type;//鍩烘湰綾誨瀷鐨勫璞$被鍨?br> <br> public:<br>  PrimerType()<br>   :m_value((value_type)0)<br>  {<br>  }<br> <br>  template<typename Other><br>   PrimerType(const Other& value)<br>   :m_value(value)<br>  {<br>  }<br> <br>  ~PrimerType()<br>  {<br>   cout<<"PrimerType Destroy" << endl;<br>  }<br> <br>  //鍩烘湰綾誨瀷杞崲鎿嶄綔絎﹂噸杞?br>  operator value_type() const<br>  {<br>   return m_value;<br>  }<br> <br>  //璧嬪兼搷浣滅閲嶈澆<br>  const class_type& operator=(value_type value)<br>  {<br>   m_value=value;<br>   return *this;<br>  }<br> <br>  bool operator!( ) const <br>  {<br>   return !m_value;<br>  }<br> <br>  //浣滀負(fù)綾繪垚鍛樼殑綆楁湳榪愮畻絎︽搷浣滅閲嶈澆<br>  class_type& operator++()<br>  {// ++ 鍓嶇紑<br>   m_value+=1;<br>   return *this;<br>  }<br>  const class_type operator++(int)<br>  {// ++ 鍚庣紑 <br>   class_type oldValue=*this;<br>   m_value+=1;<br>   return oldValue;<br>  }<br>  class_type& operator--()<br>  {// -- 鍓嶇紑<br>   m_value-=1;<br>   return *this;<br>  }<br>  const class_type operator--(int)<br>  {// -- 鍚庣紑 <br>   class_type oldValue=*this;<br>   m_value-=1;<br>   return oldValue;<br>  }<br> <br>  class_type& operator+=(const value_type& value)<br>  {<br>   m_value+=value;<br>   return *this;<br>  }<br>  //銆傘傘傜渷鐣?= /= *= &= |= ^= %= 絳夌瓑<br> private:<br>  value_type m_value;<br>  friend istream& operator>><T> ( istream& is, class_type& ptvalue );<br> };<br> <br> //嫻佽緭鍏ュ嚱鏁幫紝涓嶇敤杈撳嚭錛堥氳繃綾誨瀷鎿嶄綔絎﹂噸杞借嚜鍔ㄥ畬鎴愶級(jí)<br> template<typename T><br> istream& operator>> ( istream& is, PrimerType<T>& ptvalue )<br> {<br>  is >> ptvalue.m_value;<br>  return is;<br> }<br> //鍩烘湰綾誨瀷閲嶅畾涔?br> typedef __int8  int8;<br> typedef __int16 int16;<br> typedef __int32 int32;<br> typedef __int64 int64;<br> typedef unsigned __int8 uint8;<br> typedef unsigned __int16 uint16;<br> typedef unsigned __int32 uint32;<br> typedef unsigned __int64 uint64;<br> <br> <br> //鍩烘湰綾誨瀷鐨勫璞$被鍨?br> typedef PrimerType<bool>   Boolean;<br> typedef PrimerType<int8>   Int8;<br> typedef PrimerType<int16>   Int16;<br> typedef PrimerType<int32>   Int32;<br> typedef PrimerType<int64>   Int64;<br> typedef PrimerType<uint8>   UInt8;<br> typedef PrimerType<uint16>   UInt16;<br> typedef PrimerType<uint32>   UInt32;<br> typedef PrimerType<uint64>   UInt64;<br> typedef PrimerType<float>   Float;<br> typedef PrimerType<double>   Double;<br> typedef PrimerType<long>   Long;<br> typedef PrimerType<unsigned long> ULong;<br> //鏇村弸濂界殑鍚嶅瓧<br> typedef Int8     Char;<br> typedef Int16     Short;<br> typedef Int32     Int;<br> typedef UInt8     Byte;<br> typedef UInt16     UShort;<br> typedef UInt32     UInt;<br> <br> <font color=#0000ff>//綆楁湳榪愮畻榪斿洖綾誨瀷鐨則raits錛岃繍綆楁椂浠ユ帓鍦ㄥ悗闈㈢殑綾誨瀷榪斿洖<br> #define  PRIMERTYPELIST TYPELIST_13(bool,int8,uint8,int16,uint16,int32,uint32,long,unsigned long,int64,uint64,float,double)<br> //                 |<br> //                 int<br> template <typename T1, typename T2><br> struct ResultType_Traits<br> {<br>  enum { lefttype_index =::Loki::TL::IndexOf<PRIMERTYPELIST,T1>::value};<br>  enum { righttype_index =::Loki::TL::IndexOf<PRIMERTYPELIST,T2>::value};<br>  enum { resulttype_index = (lefttype_index>righttype_index)?lefttype_index:righttype_index};</p> //鍦╲c7.1涓媔nt32浠ュ墠鐨勭被鍨嬪仛綆楁湳榪愮畻閮借繑鍥瀒nt32綾誨瀷<br>  typedef typename ::Loki::TL::TypeAt<PRIMERTYPELIST, (resulttype_index<5)?5:resulttype_index >::Result  result_type;<br> };</font><br> <br> //浣滀負(fù)鍏ㄥ眬鐨勭畻鏈繍綆楃鎿嶄綔絎﹂噸杞?+ - * /<br> template<typename T1,typename T2><br> <font color=#0000ff>typename ResultType_Traits<T1,T2>::result_type</font> operator +(const PrimerType<T1>& lhs,const T2& rhs)<br> {<br>  return (T1)lhs+rhs;<br> }<br> <br> template<typename T1,typename T2><br> <font color=#0000ff>typename ResultType_Traits<T1,T2>::result_type</font> operator +(const T1& lhs,const PrimerType<T2>& rhs)<br> {<br>  return lhs+(T2)rhs;<br> }<br> <br> template<typename T1,typename T2><br> <font color=#0000ff>typename ResultType_Traits<T1,T2>::result_type</font> operator +(const PrimerType<T1>& lhs,const PrimerType<T2>& rhs)<br> {<br>  return (T1)lhs+(T2)rhs;<br> }<br> //銆傘傘傜渷鐣?- * /絳夌瓑<br> <br> // 閫昏緫榪愮畻絎﹂噸杞?br> template<typename T1,typename T2><br> bool operator ==(const PrimerType<T1>& lhs,const T2& rhs)<br> {<br>  return (T1)lhs==rhs;<br> }<br> <br> template<typename T1,typename T2><br> bool operator ==(const T1& lhs,const PrimerType<T2>& rhs)<br> {<br>  return lhs==(T2)rhs;<br> }<br> <br> template<typename T1,typename T2><br> bool operator ==(const PrimerType<T1>& lhs,const PrimerType<T2>& rhs)<br> {<br>  return (T1)lhs==(T2)rhs;<br> }<br> //銆傘傘傜渷鐣?!= >= 絳夌瓑<br> <br> <br>6.灝忕粨<br> 浣跨敤瀵硅薄鏉ヨ〃紺哄熀鏈被鍨嬶紝鐢變簬浣跨敤浜?jiǎn)virtual鐨勬瀽鏋勫畠鏄湁鍐呭瓨?gòu)躬璐圭殑锛屼絾鍦ㄥ緢澶氬簲鐢ㄤ腑瀹冩槸寰堟湁鐢ㄧ殑銆?br> 鍚屾椂浣犲彲浠ュ鍔燬tring/DateTime鐨勭壒鍖栨敮鎸侊紝榪欐牱灝卞畬鏁翠簡(jiǎn)<br></font> <img src ="http://m.shnenglu.com/xingmuxixi/aggbug/55796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/xingmuxixi/" target="_blank">閱掔洰瑗胯タ</a> 2008-07-10 14:44 <a href="http://m.shnenglu.com/xingmuxixi/articles/55796.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[杞琞delegate 涓?澶氱嚎紼?http://m.shnenglu.com/xingmuxixi/articles/16694.html閱掔洰瑗胯タ閱掔洰瑗胯タThu, 21 Dec 2006 08:05:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16694.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16694.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16694.html#Feedback0http://m.shnenglu.com/xingmuxixi/comments/commentRss/16694.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16694.html 寰堝鏃跺欏啓 windows 紼嬪簭閮介渶瑕佺粨鍚堝綰跨▼錛屽湪 .net 涓敤濡備笅寰椾唬鐮佹潵鍒涘緩騫跺惎鍔ㄤ竴涓柊鐨勭嚎紼嬨?/span>

public void ThreadProc();

Thread thread = new Thread( new ThreadStart( ThreadProc ) );

thread.IsBackground = true;

thread.Start();

浣嗘槸寰堝鏃跺欙紝鍦ㄦ柊鐨勭嚎紼嬩腑錛屾垜浠渶瑕佷笌 UI 榪涜浜や簰錛屽湪 .net 涓笉鍏佽鎴戜滑鐩存帴榪欐牱鍋氥傚彲浠ュ弬鑰?/span> MSDN 涓殑鎻忚堪錛?/span>

鈥淲indows 紿椾綋鈥?/span>浣跨敤鍗曠嚎紼嬪崟鍏?span lang="EN-US"> (STA) 妯″瀷錛屽洜涓?span lang="EN-US">鈥淲indows 紿椾綋鈥?/span>鍩轟簬鏈満 Win32 紿楀彛錛岃?span lang="EN-US"> Win32 紿楀彛浠庢湰璐ㄤ笂鑰岃█鏄崟鍏冪嚎紼嬨?span lang="EN-US">STA 妯″瀷鎰忓懗鐫鍙互鍦ㄤ換浣曠嚎紼嬩笂鍒涘緩紿楀彛錛屼絾紿楀彛涓鏃﹀垱寤哄悗灝變笉鑳藉垏鎹㈢嚎紼嬶紝騫朵笖瀵瑰畠鐨勬墍鏈夊嚱鏁拌皟鐢ㄩ兘蹇呴』鍦ㄥ叾鍒涘緩綰跨▼涓婂彂鐢熴傞櫎浜?span lang="EN-US"> Windows 紿椾綋涔嬪錛?span lang="EN-US">.NET Framework 涓殑綾諱嬌鐢ㄨ嚜鐢辯嚎紼嬫ā鍨嬨?span lang="EN-US">

STA 妯″瀷瑕佹眰闇浠庢帶浠剁殑闈炲垱寤虹嚎紼嬭皟鐢ㄧ殑鎺т歡涓婄殑浠諱綍鏂規(guī)硶蹇呴』琚皝閫佸埌錛堝湪鍏朵笂鎵ц錛夎鎺т歡鐨勫垱寤虹嚎紼嬨傚熀綾?span lang="EN-US"> Control 涓烘鐩殑鎻愪緵浜?jiǎn)鑻ヲq叉柟娉曪紙Invoke銆?span lang="EN-US">BeginInvoke 鍜?span lang="EN-US"> EndInvoke錛夈?b>Invoke鐢熸垚鍚屾鏂規(guī)硶璋冪敤錛?b>BeginInvoke鐢熸垚寮傛鏂規(guī)硶璋冪敤銆?span lang="EN-US">

Windows 紿椾綋涓殑鎺т歡琚粦瀹氬埌鐗瑰畾鐨勭嚎紼嬶紝涓嶅叿澶囩嚎紼嬪畨鍏ㄦс傚洜姝わ紝濡傛灉浠庡彟涓涓嚎紼嬭皟鐢ㄦ帶浠剁殑鏂規(guī)硶錛岄偅涔堝繀欏諱嬌鐢ㄦ帶浠剁殑涓涓?span lang="EN-US"> Invoke 鏂規(guī)硶鏉ュ皢璋冪敤灝侀佸埌閫傚綋鐨勭嚎紼嬨?span lang="EN-US">

姝e鎵鐪嬪埌鐨勶紝鎴戜滑蹇呴』璋冪敤 Invoke 鏂規(guī)硶錛岃?/span> BeginInvoke 鍙互璁や負(fù)鏄?/span> Invoke 鐨勫紓姝ョ増鏈傝皟鐢ㄦ柟娉曞涓嬶細(xì)

public delegate void OutDelegate(string text);

public void OutText(string text)

{

聽聽聽聽 txt.AppendText(text);

聽聽聽聽 txt.AppendText( "\t\n" );

}

OutDelegate outdelegate = new OutDelegate( OutText );

this .BeginInvoke(outdelegate, newobject[]{text});

濡傛灉鎴戜滑闇瑕佸湪鍙﹀涓涓嚎紼嬮噷闈㈠ UI 榪涜鎿嶄綔錛屾垜浠渶瑕佷竴涓被浼?/span> OutText 鐨勫嚱鏁幫紝榪橀渶瑕佷竴涓鍑芥暟鐨勫鎵?/span> delegate 錛屽綋鐒?dòng)灱寴q欓噷灞曠ず鐨勬槸鑷畾涔夌殑錛?/span> .net 涓繕鏈夊緢澶氬叾浠栫被鍨嬬殑濮旀墭錛屽彲浠ョ洿鎺ヤ嬌鐢紝涓嶉渶瑕佽屽澹版槑銆備緥濡傦細(xì) MethodInvoker 鍜?/span> EventHandler 錛岃繖涓ょ綾誨瀷濮旀墭鐨勫嚱鏁板瑙傛槸鍥哄畾鐨勶紝 MethodInvoker 鏄?/span> void Function() 綾誨瀷鐨勫鎵橈紝鑰?/span> EventHandler 鏄?/span> void Function(object, EventArgs) 綾誨瀷鐨勫鎵橈紝絎竴涓笉鏀寔鍙傛暟錛岀浜屼腑鐨勫弬鏁扮被鍨嬪拰鏁伴噺閮芥槸鍥哄畾鐨勶紝榪欎袱縐嶅鎵樺彲浠ュ緢鏂逛究鐨勮皟鐢紝浣嗘槸緙轟箯鐏墊椿鎬с傝娉ㄦ剰 BeginInvoke 鍓嶉潰鐨勫璞℃槸 this 錛屼篃灝辨槸涓葷嚎紼嬨傜幇鍦ㄥ啀浠嬬粛 Control.InvokeRequired 錛?/span> Control 鏄墍鏈夋帶浠剁殑鍩虹被錛屽浜庤繖涓睘鎬?/span> MSDN 鐨勬弿榪版槸錛?/span>

鑾峰彇涓涓鹼紝璇ュ兼寚紺鴻皟鐢ㄦ柟鍦ㄥ鎺т歡榪涜鏂規(guī)硶璋冪敤鏃舵槸鍚﹀繀欏昏皟鐢?/span> Invoke 鏂規(guī)硶錛屽洜涓鴻皟鐢ㄦ柟浣嶄簬鍒涘緩鎺т歡鎵鍦ㄧ殑綰跨▼浠ュ鐨勭嚎紼嬩腑銆?/span>

璇ュ睘鎬у彲鐢ㄤ簬紜畾鏄惁蹇呴』璋冪敤 Invoke 鏂規(guī)硶錛屽綋涓嶇煡閬撲粈涔堢嚎紼嬫嫢鏈夋帶浠舵椂榪欏緢鏈夌敤銆?/span>

涔熷氨鏄閫氳繃鍒ゆ柇 InvokeRequired 鍙互鐭ラ亾鏄惁闇瑕佺敤濮旀墭鏉ヨ皟鐢ㄥ綋鍓嶆帶浠剁殑涓浜涙柟娉曪紝濡傛鍙互鎶?/span> OutText 鍑芥暟淇敼涓涓嬶細(xì)

public delegate void OutDelegate(string text);

public void OutText(string text)

{

聽聽聽聽 if( txt.InvokeRequired )

聽聽聽聽 {

聽聽聽聽聽聽聽聽 OutDelegate outdelegate = new OutDelegate( OutText );

聽聽聽聽聽聽聽聽 this.BeginInvoke(outdelegate, newobject[]{text});

聽聽聽聽聽聽聽聽 return;

聽聽聽聽 }

聽聽聽聽 txt.AppendText(text);

聽聽聽聽 txt.AppendText( "\t\n" );

}

娉ㄦ剰錛岃繖閲岀殑鍑芥暟娌℃湁榪斿洖錛屽鏋滄湁榪斿洖錛岄渶瑕佽皟鐢?/span> Invoke 鎴栬?/span> EndInvoke 鏉ヨ幏寰楄繑鍥炵殑緇撴灉錛屼笉瑕佸洜涓哄寘瑁呰屼涪澶變簡(jiǎn)榪斿洖鍊箋傚鏋滆皟鐢ㄦ病鏈夊畬鎴愶紝 Invoke 鍜?/span> EndInvoke 閮藉皢浼?xì)寮曡捣闃诲銆?/span>

鐜板湪濡傛灉鎴戞湁涓涓嚎紼嬪嚱鏁板涓嬶細(xì)

public void ThreadProc()

{

聽聽聽聽 for(int i = 0; i < 5; i++)

聽聽聽聽 {

聽聽聽聽聽聽聽聽 OutText( i.ToString() );

聽聽聽聽聽聽聽聽 Thread.Sleep(1000);

聽聽聽聽 }

}

濡傛灉寰幆鐨勬鏁板緢澶э紝鎴栬呮紡浜?/span> Thread.Sleep(1000); 錛岄偅涔堜綘鐨?/span> UI 鑲畾浼?xì)鍋滄鍝嶅簲锛屾兂鐭ラ亾鍘熷洜鍚楀Q熺湅鐪?/span> BeginInvoke 鍓嶉潰鐨勫璞★紝娌¢敊錛屽氨鏄?/span> this 錛屼篃灝辨槸涓葷嚎紼嬶紝褰撲綘鐨勪富綰跨▼涓嶅仠鐨勮皟鐢?/span> OutText 鐨勬椂鍊欙紝 UI 褰撶劧浼?xì)鍋滄鍝嶅簲銆?/span>

涓庝互鍓?/span> VC 涓垱寤轟竴涓柊鐨勭嚎紼嬮渶瑕佽皟鐢?/span> AfxBeginThread 鍑芥暟錛岃鍑芥暟涓涓涓弬鏁板氨鏄嚎紼嬪嚱鏁扮殑鍦板潃錛岃岀浜屼釜鍙傛暟鏄竴涓被鍨嬩負(fù) LPVOID 鐨勬寚閽堢被鍨嬶紝榪欎釜鍙傛暟灝嗕紶閫掔粰綰跨▼鍑芥暟銆傜幇鍦ㄦ垜浠病鏈夊姙娉曞啀浣跨敤榪欑鏂規(guī)硶鏉ヤ紶閫掑弬鏁頒簡(jiǎn)銆傛垜浠渶瑕佸皢浼犻掔粰綰跨▼鐨勫弬鏁板拰綰跨▼鍑芥暟鍖呰鎴愪竴涓崟鐙殑綾伙紝鐒跺悗鍦ㄨ繖涓被鐨勬瀯閫犲嚱鏁頒腑鍒濆鍖栬綰跨▼鎵闇鐨勫弬鏁幫紝鐒跺悗鍐嶅皢璇ュ疄渚嬬殑綰跨▼鍑芥暟浼犻掔粰 Thread 綾葷殑鏋勯犲嚱鏁般備唬鐮佸ぇ鑷村涓嬶細(xì)

public class ProcClass

{

聽聽聽聽 private string procParameter = "";

聽聽聽聽 public ProcClass(string parameter)

聽聽聽聽 {

聽聽聽聽聽聽聽聽 procParameter = parameter;

聽聽聽聽 }

聽聽聽聽 public void ThreadProc()

聽聽聽聽 {

聽聽聽聽 }

}

ProcClass threadProc = new ProcClass("use thread class");

Thread thread = new Thread( new ThreadStart( threadProc.ThreadProc ) );

thread.IsBackground = true;

thread.Start();

灝辨槸榪欐牱錛岄渶瑕佸緩绔嬩竴涓腑闂寸被鏉ヤ紶閫掔嚎紼嬫墍闇鐨勫弬鏁般?/span>

閭d箞濡傛灉鎴戠殑綰跨▼鍙堥渶瑕佸弬鏁幫紝鍙堥渶瑕佸拰 UI 榪涜浜や簰鐨勬椂鍊欒鎬庝箞鍔炲憿錛熷彲浠ヤ慨鏀逛竴涓嬩唬鐮侊細(xì)

public class ProcClass

{

聽聽聽聽 private string procParameter = "";

聽聽聽聽 private Form1.OutDelegate delg = null;

聽聽聽聽 public ProcClass(string parameter, Form1.OutDelegate delg)

聽聽聽聽 {

聽聽聽聽聽聽聽聽 procParameter = parameter;

聽聽聽聽聽聽聽聽 this.delg = delg;

聽聽聽聽 }

聽聽聽聽 public void ThreadProc()

聽聽聽聽 {

聽聽聽聽聽聽聽聽 delg.BeginInvoke("use ProcClass.ThreadProc()", null, null);

聽聽聽聽 }

}

ProcClass threadProc = new ProcClass("use thread class", new OutDelegate(OutText));

Thread thread = new Thread( new ThreadStart( threadProc.ThreadProc ) );

thread.IsBackground = true;

thread.Start();

榪欓噷鍙槸鎴戠殑涓浜涚悊瑙o紝濡傛灉鏈変粈涔堥敊璇垨鑰呬笉褰撶殑鍦版柟錛屾榪庢寚鍑恒?/span>



]]>
鍘昏吘璁椂閬囧埌鐨勪竴涓潰璇曢http://m.shnenglu.com/xingmuxixi/articles/16551.html閱掔洰瑗胯タ閱掔洰瑗胯タSun, 17 Dec 2006 07:33:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16551.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16551.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16551.html#Feedback1http://m.shnenglu.com/xingmuxixi/comments/commentRss/16551.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16551.html聽* 鍒嗙瀛楃涓?br />聽* 榪欎釜綾葷殑鍔熻兘錛屾槸鎶婃寚瀹氱殑瀛楃涓詫紝浠モ榺鈥欎負(fù)鐣岋紝鎶婂瓧絎︿覆鍒嗙
聽* 鍘昏吘璁潰璇曟墜鏈哄紑鍙戠殑鏃跺欓亣鍒扮殑闈㈣瘯棰橈紝褰撴椂鐢變簬瀵筳ava璇█緇嗚妭涓嶇啛鎮(zhèn)夛紝
聽* 娌″仛鍑烘潵錛屾墍浠ヤ竴鐩磋胯夸簬鎬
聽* 鐢變簬浣跨敤浜?jiǎn)String鍜孡ist錛屼嬌寰楃敤java瀹炵幇鍙樺緱寰堢畝鍗?br />聽* 鐢╟瀹炵幇鎵嶆槸鐜嬮亾
聽*/

]]>
鑵捐鏈鏂伴潰璇曢,綆楁硶楂樻墜璇瘋繘http://m.shnenglu.com/xingmuxixi/articles/16545.html閱掔洰瑗胯タ閱掔洰瑗胯タSun, 17 Dec 2006 07:31:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16545.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16545.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16545.html#Feedback6http://m.shnenglu.com/xingmuxixi/comments/commentRss/16545.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16545.html1,涓や釜鏁存暟闆嗗悎A,B,姹傚叾浜ら泦,瑕佹眰鍐欏嚭浠g爜;
2,姹備竴涓鍧涚殑鍦ㄧ嚎浜烘暟,鍋囪鏈変竴涓鍧?鍏舵敞鍐孖D鏈変袱蹇嗕釜,姣忎釜ID浠庣櫥闄嗗埌閫鍑轟細(xì)鍚戜竴涓棩蹇楁枃浠朵腑璁頒笅鐧婚檰鏃墮棿鍜岄鍑烘椂闂?瑕佹眰鍐欎竴涓畻娉曠粺璁′竴澶╀腑璁哄潧鐨勭敤鎴峰湪綰垮垎甯?鍙栨牱綺掑害涓虹.

]]>
涓閬撹吘璁殑闈㈣瘯棰?http://m.shnenglu.com/xingmuxixi/articles/16542.html閱掔洰瑗胯タ閱掔洰瑗胯タSun, 17 Dec 2006 07:30:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16542.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16542.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16542.html#Feedback2http://m.shnenglu.com/xingmuxixi/comments/commentRss/16542.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16542.html{
word聽m_a1;
word聽m_a2;
a(){m_a1=1;m_a2=2;}
void聽fun(){printf("%d,%d",m_a1,m_a2);}
}
class聽b
{
dword聽m_a3;
b(){m_a3=3;}
void聽fun(){printf("%d",m_a3);}
}
main()
{
a聽a;
b聽*pb;
pb=b*(&a);
pb->fun();
}
杈撳嚭鏄粈涔堬紵


]]>
c#澶氱嚎紼嬫暀瀛?4):綰跨▼姹犲拰寮傛緙栫▼http://m.shnenglu.com/xingmuxixi/articles/16096.html閱掔洰瑗胯タ閱掔洰瑗胯タThu, 07 Dec 2006 07:05:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16096.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16096.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16096.html#Feedback0http://m.shnenglu.com/xingmuxixi/comments/commentRss/16096.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16096.html濡傛灉浣犱粩緇嗛槄璇諱簡(jiǎn)鎴戝墠闈㈢殑涓夌瘒鏂囩珷,鎴戠浉淇′綘瀵圭敤.NET Framework鎻愪緵鐨凷ystem.Threading.Thread綾誨拰涓浜涚嚎紼嬪悓姝ョ殑綾誨熀鏈殑綰跨▼鐭ヨ瘑鍜屽綰跨▼緙栫▼鐭ヨ瘑寰堜簡(jiǎn)瑙c傛垜浠皢鍦ㄨ繖閲岃繘涓姝ヨ璁轟竴浜?NET綾?浠ュ強(qiáng)浠栦滑鍦ㄥ綰跨▼緙栫▼涓壆婕旂殑瑙掕壊鍜屾庝箞緙栫▼銆傚畠浠槸:

銆銆System.Threading.ThreadPool 綾?/strong>

銆銆System.Threading.Timer 綾?br />
銆銆濡傛灉綰跨▼鐨勬暟鐩茍涓嶆槸寰堝,鑰屼笖浣犳兂鎺у埗姣忎釜綰跨▼鐨勭粏鑺傝濡傜嚎紼嬬殑浼樺厛綰х瓑,浣跨敤Thread鏄瘮杈冨悎閫傜殑;浣嗘槸濡傛灉鏈夊ぇ閲忕殑綰跨▼,鑰冭檻浣跨敤綰跨▼姹犲簲璇ユ洿濂戒竴浜?瀹冩彁渚涗簡(jiǎn)楂樻晥鐨勭嚎紼嬬鐞嗘満鍒舵潵澶勭悊澶氫換鍔°?瀵逛簬瀹氭湡鐨勬墽琛屼換鍔imer綾繪槸鍚堥傜殑;浣跨敤浠h〃鏄紓姝ユ柟娉曡皟鐢ㄧ殑棣栭夈?br />
System.Threading.ThreadPool Class

銆銆褰撲綘鍒涘緩搴旂敤紼嬪簭鏃?浣犲簲璇ヨ璇嗗埌澶ч儴鍒嗘椂闂翠綘鐨勭嚎紼嬪湪絀洪棽鐨勭瓑寰呮煇浜涗簨浠剁殑鍙戠敓(璇稿鎸変笅涓涓敭鎴栦睛鍚鑺傚瓙鐨勮姹?銆傛鏃犵枒闂殑,浣犱篃浼?xì)璁や给櫩欐槸缁濆鐨剫躬璐硅祫婧愩?br />
銆銆濡傛灉榪欓噷鏈夊緢澶氱殑浠誨姟闇瑕佸畬鎴?姣忎釜浠誨姟闇瑕佷竴涓嚎紼?浣犲簲璇ヨ冭檻浣跨敤綰跨▼姹犳潵鏇存湁鏁堢殑綆$悊浣犵殑璧勬簮騫朵笖浠庝腑鍙楃泭銆傜嚎紼嬫睜鏄墽琛岀殑澶氫釜綰跨▼闆嗗悎,瀹冨厑璁鎬綘娣誨姞浠ョ嚎紼嬭嚜鍔ㄥ垱寤哄拰寮濮嬬殑浠誨姟鍒伴槦鍒楅噷闈㈠幓銆備嬌鐢ㄧ嚎紼嬫睜浣垮緱浣犵殑緋葷粺鍙互浼樺寲綰跨▼鍦–PU浣跨敤鏃剁殑鏃墮棿紕庣墖銆備絾鏄璁頒綇鍦ㄤ換浣曠壒瀹氱殑鏃墮棿鐐?姣忎竴涓繘紼嬪拰姣忎釜綰跨▼姹犲彧鏈変竴涓竴涓鍦ㄨ繍琛岀殑綰跨▼銆傝繖涓被浣垮緱浣犵殑綰跨▼緇勬垚鐨勬睜鍙互琚郴緇熺鐞?鑰屼嬌浣犵殑涓昏綺懼姏闆嗕腑鍦ㄥ伐浣滄祦鐨勯昏緫鑰屼笉鏄嚎紼嬬殑綆$悊銆?br />
銆銆褰撶涓嬈″疄渚嬪寲ThreadPool綾繪椂綰跨▼姹犲皢琚垱寤恒傚畠鏈変竴涓粯璁ょ殑涓婇檺,鍗蟲瘡澶勭悊鍣ㄦ渶澶氬彲浠ユ湁25涓?浣嗘槸榪欎釜涓婇檺鏄彲浠ユ敼鍙樼殑銆傝繖鏍蜂嬌寰楀鐞嗗櫒涓嶄細(xì)闂茬疆涓嬫潵銆傚鏋滃叾涓竴涓嚎紼嬬瓑寰呮煇涓簨浠剁殑鍙戠敓,綰跨▼姹犲皢鍒濆鍖栧彟澶栦竴涓嚎紼嬪茍鎶曞叆澶勭悊鍣ㄥ伐浣?綰跨▼姹犲氨鏄繖鏍蜂笉鍋滅殑鍒涘緩宸ヤ綔鐨勭嚎紼嬪拰鍒嗛厤浠誨姟緇欓偅浜涙病鏈夊伐浣滅殑鍦ㄩ槦鍒楅噷鐨勭嚎紼嬨傚敮涓鐨勯檺鍒舵槸宸ヤ綔綰跨▼鐨勬暟鐩笉鑳借秴榪囨渶澶у厑璁哥殑鏁扮洰銆傛瘡涓嚎紼嬪皢榪愯鍦ㄩ粯璁ょ殑浼樺厛綰у拰浣跨敤榛樿鐨勫睘浜庡綰跨▼絀洪棿鐨勫爢鏍堝ぇ灝忕┖闂淬備竴鏃︿竴欏瑰伐浣滀換鍔¤鍔犲叆闃熷垪,浣犳槸涓嶈兘鍙栨秷鐨勩?br />
銆銆璇鋒眰綰跨▼姹犲鐞嗕竴涓換鍔℃垨鑰呭伐浣滈」鍙互璋冪敤QueueUserWorkItem鏂規(guī)硶銆傝繖涓柟娉曞甫涓涓猈aitCallback浠h〃綾誨瀷鐨勫弬鏁?榪欎釜鍙傛暟鍖呰浜?jiǎn)浣犺嵂瀹屾垚鐨勪徽d姟銆傝繍琛屾椂鑷姩涓烘瘡涓涓殑浠誨姟鍒涘緩綰跨▼騫朵笖鍦ㄤ換鍔¢噴鏀炬椂閲婃斁綰跨▼銆?br />
銆銆涓嬮潰鐨勪唬鐮佽鏄庝簡(jiǎn)濡備綍鍒涘緩綰跨▼姹犲拰鎬庢牱娣誨姞浠誨姟:

public void afunction(object o)

{

// do what ever the function is supposed to do.

}

//thread entry code

{

// create an instance of WaitCallback

WaitCallback myCallback = new WaitCallback (afunction);

//add this to the thread pool / queue a task

ThreadPool.QueueUserWorkItem (myCallback);

}


銆銆浣犱篃鍙互閫氳繃璋冪敤ThreadPool.RegisterWaitForSingleObject鏂規(guī)硶鏉ヤ紶閫掍竴涓猄ystem.Threading.WaitHandle,褰撹閫氱煡鎴栬呮椂闂磋秴榪囦簡(jiǎn)璋冪敤琚玈ystem.Threading.WaitOrTimerCallback鍖呰鐨勬柟娉曘?/p>

銆銆綰跨▼姹犲拰鍩轟簬浜嬩歡鐨勭紪紼嬫ā寮忎嬌寰楃嚎紼嬫睜瀵規(guī)敞鍐岀殑WaitHandles鐨勭洃鎺у拰瀵瑰悎閫傜殑WaitOrTimerCallback浠h〃鏂規(guī)硶鐨勮皟鐢ㄥ崄鍒嗙畝鍗?褰揥aitHandle琚噴鏀炬椂)銆傝繖浜涘仛娉曞叾瀹炲緢綆鍗曘傝繖閲屾湁涓涓嚎紼嬩笉鏂殑瑙傛祴鍦ㄧ嚎紼嬫睜闃熷垪絳夊緟鎿嶄綔鐨勭姸鎬併備竴鏃︾瓑寰呮搷浣滃畬鎴?涓涓嚎紼嬪皢琚墽琛屼笌鍏跺搴旂殑浠誨姟銆傚洜姝?榪欎釜鏂規(guī)硶闅忕潃鍑哄彂瑙﹀彂浜嬩歡鐨勫彂鐢熻屽鍔犱竴涓嚎紼嬨?br />
銆銆璁╂垜浠湅鐪嬫庝箞闅忎簨浠舵坊鍔犱竴涓嚎紼嬪埌綰跨▼姹?鍏跺疄寰堢畝鍗曘傛垜浠彧闇瑕佸垱寤轟竴涓狹anualResetEvent綾葷殑浜嬩歡鍜屼竴涓猈aitOrTimerCallback鐨勪唬琛?鐒跺悗鎴戜滑闇瑕佷竴涓惡甯︿唬琛ㄧ姸鎬佺殑瀵硅薄,鍚屾椂鎴戜滑涔熻鍐沖畾浼戞伅闂撮殧鍜屾墽琛屾柟寮忋傛垜浠皢涓婇潰鐨勯兘娣誨姞鍒扮嚎紼嬫睜,騫朵笖嬋鍙戜竴涓簨浠?

public void afunction(object o)

{

// do what ever the function is supposed to do.

}


//object that will carry the status information

public class anObject

{

}

//thread entry code

{

//create an event object

ManualResetEvent aevent = new ManualResetEvent (false);


// create an instance of WaitOrTimerCallback

WaitOrTimerCallback thread_method = new WaitOrTimerCallback (afunction);


// create an instance of anObject

anObject myobj = new anObject();


// decide how thread will perform

int timeout_interval = 100; // timeout in milli-seconds.

bool onetime_exec = true;


//add all this to the thread pool.

ThreadPool. RegisterWaitForSingleObject (aevent, thread_method, myobj, timeout_interval, onetime_exec);


// raise the event

aevent.Set();

}


銆銆鍦≦ueueUserWorkItem鍜孯egisterWaitForSingleObject鏂規(guī)硶涓?綰跨▼姹犲垱寤轟簡(jiǎn)涓涓悗鍙扮殑綰跨▼鏉ュ洖璋冦傚綋綰跨▼姹犲紑濮嬫墽琛屼竴涓換鍔?涓や釜鏂規(guī)硶閮藉皢璋冪敤鑰呯殑鍫嗘爤鍚堝茍鍒扮嚎紼嬫睜鐨勭嚎紼嬪爢鏍堜腑銆傚鏋滈渶瑕佸畨鍏ㄦ鏌ュ皢鑰楄垂鏇村鐨勬椂闂村拰澧炲姞緋葷粺鐨勮礋鎷?鍥犳鍙互閫氳繃浣跨敤瀹冧滑瀵瑰簲鐨勪笉瀹夊叏鐨勬柟娉曟潵閬垮厤瀹夊叏媯(gè)鏌ャ傚氨鏄疶hreadPool.UnsafeRegisterWaitForSingleObject 鍜孴hreadPool.UnsafeQueueUserWorkItem銆?br />
銆銆浣犱篃鍙互瀵逛笌絳夊緟鎿嶄綔鏃犲叧鐨勪換鍔℃帓闃熴?Timer-queue timers and registered wait operations涔熶嬌鐢ㄧ嚎紼嬫睜銆傚畠浠殑榪斿洖鏂規(guī)硶涔熻鏀懼叆綰跨▼姹犳帓闃熴?br />
銆銆綰跨▼姹犳槸闈炲父鏈夌敤鐨?琚箍娉涚殑鐢ㄤ簬銆侼ET騫沖彴涓婄殑濂楄妭瀛愮紪紼?絳夊緟鎿嶄綔娉ㄥ唽,榪涚▼璁℃椂鍣ㄥ拰寮傛鐨処/O銆傚浜庡皬鑰岀煭鐨勪換鍔?綰跨▼姹犳彁渚涚殑鏈哄埗涔熸槸鍗佸垎渚垮埄澶勪簬澶氱嚎紼嬬殑銆傜嚎紼嬫睜瀵逛簬瀹屾垚璁稿鐙珛鐨勪換鍔¤屼笖涓嶉渶瑕侀愪釜鐨勮緗嚎紼嬪睘鎬ф槸鍗佸垎渚垮埄鐨勩備絾鏄?浣犱篃搴旇寰堟竻妤?鏈夊緢澶氱殑鎯呭喌鏄彲浠ョ敤鍏朵粬鐨勬柟娉曟潵鏇夸唬綰跨▼姹犵殑銆傛瘮濡傝浣犵殑璁″垝浠誨姟鎴栫粰姣忎釜綰跨▼鐗瑰畾鐨勫睘鎬?鎴栬呬綘闇瑕佸皢綰跨▼鏀懼叆鍗曚釜綰跨▼鐨勭┖闂?鑰岀嚎紼嬫睜鏄皢鎵鏈夌殑綰跨▼鏀懼叆涓涓綰跨▼絀洪棿),鎶戞垨鏄竴涓壒瀹氱殑浠誨姟鏄緢鍐楅暱鐨?榪欎簺鎯呭喌浣犳渶濂借冭檻娓呮,瀹夊叏鐨勫姙娉曟瘮鐢ㄧ嚎紼嬫睜搴旇鏄綘鐨勯夋嫨銆?br />

System.Threading.Timer Class

銆銆Timer綾誨浜庡懆鏈熸х殑鍦ㄥ垎紱葷殑綰跨▼鎵ц浠誨姟鏄潪甯告湁鏁堢殑,瀹冧笉鑳借緇ф壙銆?br />
銆銆榪欎釜綾誨挨鍏剁敤鏉ュ紑鍙戞帶鍒跺彴搴旂敤紼嬪簭,鍥犱負(fù)System.Windows.Forms.Time鏄笉鍙敤鐨勩傛瘮濡傚悓鏉ュ浠芥枃浠跺拰媯(gè)鏌ユ暟鎹簱鐨勪竴鑷存с?/p>

銆銆褰撳垱寤篢imer瀵硅薄鏃?浣犺嵂浼拌鍦ㄧ涓涓唬鐞嗚皟鐢ㄤ箣鍓嶇瓑寰呯殑鏃墮棿鍜屽悗鏉ョ殑姣忔鎴愬姛璋冪敤涔嬮棿鐨勬椂闂淬備竴涓畾鏃惰皟鐢ㄥ彂鐢熷湪鏂規(guī)硶鐨勫簲寰楁椂闂磋繃鍘?騫朵笖鍦ㄥ悗鏉ュ懆鏈熸х殑璋冪敤榪欎釜鏂規(guī)硶銆備綘鍙互閫傚簲Timer鐨凜hange鏂規(guī)硶鏉ユ敼鍙樿繖浜涜緗殑鍊兼垨鑰呬嬌Timer澶辨晥銆傚綋瀹氭椂鍣═imer涓嶅啀浣跨敤鏃?浣犲簲璇ヨ皟鐢―ispose鏂規(guī)硶鏉ラ噴鏀懼叾璧勬簮銆?br />
銆銆TimerCallback浠h〃璐熻矗鎸囧畾涓嶵imer瀵硅薄鐩稿叧鑱旂殑鏂規(guī)硶(灝辨槸瑕佸懆鏈熸墽琛岀殑浠誨姟)鍜岀姸鎬併傚畠鍦ㄦ柟娉曞簲寰楃殑鏃墮棿榪囧幓涔嬪悗璋冪敤涓嬈″茍涓斿懆鏈熸х殑璋冪敤榪欎釜鏂規(guī)硶鐩村埌璋冪敤浜?jiǎn)Dispose鏂規(guī)硶閲婃斁浜?jiǎn)Timer鐨勬墍鏈夎祫婧愩傜郴緇熻嚜鍔ㄥ垎閰嶅垎紱葷殑綰跨▼銆?br />
銆銆璁╂垜浠潵鐪嬩竴孌典唬鐮佺湅鐪嬩簨濡備綍鍒涘緩Timer瀵硅薄鍜屼嬌鐢ㄥ畠鐨勩傛垜浠鍏堣鍒涘緩涓涓猅imerCallback浠g悊,鍦ㄥ悗闈㈢殑鏂規(guī)硶涓浣跨敤鍒扮殑銆傚鏋滈渶瑕?涓嬩竴姝ユ垜浠鍒涘緩涓涓姸鎬佸璞?瀹冩嫢鏈変笌琚唬鐞嗚皟鐢ㄧ殑鏂規(guī)硶鐩稿叧鑱旂殑鐗瑰畾淇℃伅銆備負(fù)浜?jiǎn)鋴蓸q欎簺綆鍗曚竴浜?鎴戜滑浼犻掍竴涓┖鍙傛暟銆傛垜浠皢瀹炰緥鍖栦竴涓猅imer瀵硅薄,鐒跺悗鍐嶄嬌鐢–hange鏂規(guī)硶鏀瑰彉Timer鐨勮緗?鏈鍚庤皟鐢―ispose鏂規(guī)硶閲婃斁璧勬簮銆?br />

// class that will be called by the Timer

public class WorkonTimerReq

{

public void aTimerCallMethod()

{

// does some work

}

}


//timer creation block

{

//instantiating the class that gets called by the Timer.

WorkonTimerReq anObj = new WorkonTimerReq () ;


// callback delegate

TimerCallback tcallback = new TimerCallback(anObj. aTimerCallMethod) ;


// define the dueTime and period

long dTime = 20 ; // wait before the first tick (in ms)

long pTime = 150 ; // timer during subsequent invocations (in ms)


// instantiate the Timer object

Timer atimer = new Timer(tcallback, null, dTime, pTime) ;


// do some thing with the timer object

...

//change the dueTime and period of the Timer

dTime=100;

pTime=300;

atimer.Change(dTime, pTime) ;

// do some thing

...

atimer.Dispose() ;

...

}



寮傛緙栫▼

銆銆榪欓儴鍒嗗唴瀹瑰鏋滆璁叉竻妤氭湰鏉ュ氨鏄緢澶х殑涓閮ㄥ垎,鍦ㄨ繖閲?鎴戜笉鎵撶畻璇︾粏璁ㄨ榪欎釜涓滆タ,鎴戜滑鍙槸闇瑕佺洿鍒板畠鏄粈涔?鍥犱負(fù)澶氱嚎紼嬬紪紼嬪鏋滃拷寰嬪紓姝ョ殑澶氱嚎紼嬬紪紼嬫樉鐒舵槸涓嶅簲璇ョ殑銆傚紓姝ョ殑澶氱嚎紼嬬紪紼嬫槸浣犵殑紼嬪簭鍙兘浼?xì)鐢ㄥ埌鐨勫彟澶栦竴縐嶅綰跨▼緙栫▼鏂規(guī)硶銆?br />
銆銆鍦ㄥ墠闈㈢殑鏂囩珷鎴戜滑鑺變簡(jiǎn)寰堝ぇ鐨勭瘒騫呮潵浠嬬粛綰跨▼鐨勫悓姝ュ拰鎬庝箞瀹炵幇綰跨▼鐨勫悓姝?浣嗘槸瀹冩湁涓涓浐鏈夌殑鑷村懡鐨勭己鐐?浣犳垨璁告敞鎰忓埌浜?jiǎn)杩欎竴鐐廣傞偅灝辨槸姣忎釜綰跨▼蹇呴』浣滃悓姝ヨ皟鐢?涔熷氨鏄瓑鍒板叾浠栫殑鍔熻兘瀹屾垚,鍚﹀垯灝遍樆濉炪傚綋鐒?鏌愪簺鎯呭喌涓?瀵逛簬閭d簺閫昏緫涓婄浉浜掍緷璧栫殑浠誨姟鏉ヨ鏄凍澶熺殑銆傚紓姝ョ紪紼嬪厑璁告洿鍔犲鏉傜殑鐏墊椿鎬с備竴涓嚎紼嬪彲浠ヤ綔寮傛璋冪敤,涓嶉渶瑕佺瓑寰呭叾浠栫殑涓滆タ銆備綘鍙互浣跨敤榪欎簺綰跨▼浣滀換浣曠殑浠誨姟,綰跨▼璐熻矗鑾峰彇緇撴灉鎺ㄨ繘榪愯銆傝繖緇欎簣浜?jiǎn)閭d簺闇瑕佺鐞嗘暟鐩法澶х殑璇鋒眰鑰屼笖璐熸媴涓嶈搗璇鋒眰絳夊緟浠d環(huán)鐨勪紒涓氱駭鐨勭郴緇熸洿濂界殑鍙幾緙╂с?br />
銆銆.NET騫沖彴鎻愪緵浜?jiǎn)涓鑷寸殑寮傛緙栫▼鏈哄埗鐢ㄤ簬ASP.NET,I/O,Web Services,Networking,Message絳夈?br />

鍚庤

銆銆鐢變簬瀛︿範(fàn)鐨勬椂鍊欏緢闅炬壘鍒頒腑鏂囪繖鏂歸潰鐨勮祫鏂欙紝鍥犳鎴戝氨鍙ソ瀛︿範(fàn)鑻辨枃鐨勮祫鏂欙紝鐢變簬姘村鉤涓嶉珮錛岀炕璇戠殑鏃跺欏彲鑳介毦鍏嶆洸瑙e師鏂囩殑鎰忔濓紝甯屾湜澶у鑳藉鎸囧嚭錛屽悓鏃跺笇鏈涜繖浜涗笢瑗胯兘澶熺粰澶у鍦ㄥ涔?fàn)杩欐枤w潰鐭ヨ瘑緇欎簣涓瀹氱殑鍙傝冨拰甯姪錛岄偅鎬曟槸涓鐐圭偣錛屽氨寰堟鎱頒簡(jiǎn)銆?/p>

]]>
c#.net澶氱嚎紼嬬紪紼嬫暀瀛?2):Thread綾?http://m.shnenglu.com/xingmuxixi/articles/16094.html閱掔洰瑗胯タ閱掔洰瑗胯タThu, 07 Dec 2006 07:03:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16094.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16094.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16094.html#Feedback0http://m.shnenglu.com/xingmuxixi/comments/commentRss/16094.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16094.html榪欑珷灝嗗悜澶у浠嬬粛.NET涓殑綰跨▼API,鎬庝箞鏍風(fēng)敤C#鍒涘緩綰跨▼,鍚姩鍜屽仠姝㈢嚎紼?璁劇疆浼樺厛綰у拰鐘舵?

銆銆鍦?NET涓紪鍐欑殑紼嬪簭灝嗚鑷姩鐨勫垎閰嶄竴涓嚎紼?璁╂垜浠潵鐪嬬湅鐢–#緙栫▼璇█鍒涘緩綰跨▼騫朵笖緇х畫瀛︿範(fàn)綰跨▼鐨勭煡璇嗐傛垜浠兘鐭ラ亾.NET鐨勮繍琛屾椂鐜鐨勪富綰跨▼鐢盡ain ()鏂規(guī)硶鏉ュ惎鍔ㄥ簲鐢ㄧ▼搴忥紝鑰屼笖.NET鐨勭紪璇戣璦鏈夎嚜鍔ㄧ殑鍨冨溇鏀墮泦鍔熻兘,榪欎釜鍨冨溇鏀墮泦鍙戠敓鍦ㄥ彟澶栦竴涓嚎紼嬮噷闈?鎵鏈夌殑榪欎簺閮芥槸鍚庡彴鍙戠敓鐨?璁╂垜浠棤娉曟劅瑙夊埌鍙戠敓浜?jiǎn)浠涔堜簨鎯?鍦ㄨ繖閲岄粯璁ょ殑鏄彧鏈変竴涓嚎紼嬫潵瀹屾垚鎵鏈夌殑紼嬪簭浠誨姟錛屼絾鏄濡傛垜浠湪絎竴綃囨枃绔犺璁鴻繃鐨勪竴鏍鳳紝鏈夊彲鑳芥垜浠牴鎹渶瑕佽嚜宸辨坊鍔犳洿澶氱殑綰跨▼璁╃▼搴忔洿濂界殑鍗忚皟宸ヤ綔銆傛瘮濡傝鎴戜滑鐨勪緥瀛愪腑錛屼竴涓湁鐢ㄦ埛杈撳叆鐨勫悓鏃墮渶瑕佺粯鍒跺浘褰㈡垨鑰呭畬鎴愬ぇ閲忕殑榪愮畻鐨勭▼搴忥紝鎴戜滑蹇呴』寰楀鍔犱竴涓嚎紼嬶紝璁╃敤鎴風(fēng)殑杈撳叆鑳藉寰楀埌鍙?qiáng)鏃剁殑鍝嶅簲锛屽洜湄?fù)杈撳叆瀵規(guī)椂闂村拰鍝嶅簲鐨勮姹傛槸绱ц揩鐨勶紝鑰屽彟澶栦竴涓嚎紼嬭礋璐e浘褰㈢粯鍒舵垨鑰呭ぇ閲忕殑榪愮畻銆?br />
銆銆.NET 鍩虹綾誨簱鐨凷ystem.Threading鍛藉悕絀洪棿鎻愪緵浜?jiǎn)澶ч噺鐨劸c誨拰鎺ュ彛鏀寔澶氱嚎紼嬨傝繖涓懡鍚嶇┖闂存湁寰堝鐨勭被錛屾垜浠皢鍦ㄨ繖閲岀潃閲嶈璁篢hread榪欎釜綾匯?br />
銆銆System.Threading.Thread綾繪槸鍒涘緩騫舵帶鍒剁嚎紼嬶紝璁劇疆鍏朵紭鍏堢駭騫惰幏鍙栧叾鐘舵佹渶涓哄父鐢ㄧ殑綾匯備粬鏈夊緢澶氱殑鏂規(guī)硶錛屽湪榪欓噷鎴戜滑灝嗗氨姣旇緝甯哥敤鍜岄噸瑕佺殑鏂規(guī)硶鍋氫竴涓嬩粙緇嶏細(xì)

銆銆Thread.Start錛堬級(jí)錛氬惎鍔ㄧ嚎紼嬬殑鎵ц錛?br />
銆銆Thread.Suspend錛堬級(jí)錛氭寕璧風(fēng)嚎紼嬶紝鎴栬呭鏋滅嚎紼嬪凡鎸傝搗錛屽垯涓嶈搗浣滅敤錛?br />
銆銆Thread.Resume錛堬級(jí)錛氱戶緇凡鎸傝搗鐨勭嚎紼嬶紱

銆銆Thread.Interrupt錛堬級(jí)錛氫腑姝㈠浜?Wait鎴栬匰leep鎴栬匤oin 綰跨▼鐘舵佺殑綰跨▼錛?br />
銆銆Thread.Join錛堬級(jí)錛氶樆濉炶皟鐢ㄧ嚎紼嬶紝鐩村埌鏌愪釜綰跨▼緇堟鏃朵負(fù)姝?br />
銆銆Thread.Sleep錛堬級(jí)錛氬皢褰撳墠綰跨▼闃誨鎸囧畾鐨勬縐掓暟錛?br />
銆銆Thread.Abort錛堬級(jí)錛氫互寮濮嬬粓姝㈡綰跨▼鐨勮繃紼嬨傚鏋滅嚎紼嬪凡緇忓湪緇堟錛屽垯涓嶈兘閫氳繃Thread.Start錛堬級(jí)鏉ュ惎鍔ㄧ嚎紼嬨?br />
銆銆閫氳繃璋冪敤Thread.Sleep錛孴hread.Suspend鎴栬匱hread.Join鍙互鏆傚仠/闃誨綰跨▼銆傝皟鐢⊿leep()鍜孲uspend()鏂規(guī)硶鎰忓懗鐫綰跨▼灝嗕笉鍐嶅緱鍒癈PU鏃墮棿銆傝繖涓ょ鏆傚仠綰跨▼鐨勬柟娉曟槸鏈夊尯鍒殑錛孲leep()浣垮緱綰跨▼绔嬪嵆鍋滄鎵ц錛屼絾鏄湪璋冪敤Suspend()鏂規(guī)硶涔嬪墠錛屽叕鍏辮璦榪愯鏃跺繀欏誨埌杈句竴涓畨鍏ㄧ偣銆備竴涓嚎紼嬩笉鑳藉鍙﹀涓涓嚎紼嬭皟鐢⊿leep()鏂規(guī)硶錛屼絾鏄彲浠ヨ皟鐢⊿uspend()鏂規(guī)硶浣垮緱鍙﹀涓涓嚎紼嬫殏鍋滄墽琛屻傚宸茬粡鎸傝搗鐨勭嚎紼嬭皟鐢═hread.Resume錛堬級(jí)鏂規(guī)硶浼?xì)鋴慑叾鐟艟l墽琛屻備笉綆′嬌鐢ㄥ灝戞Suspend()鏂規(guī)硶鏉ラ樆濉炰竴涓嚎紼嬶紝鍙渶涓嬈¤皟鐢≧esume()鏂規(guī)硶灝卞彲浠ヤ嬌寰楃嚎紼嬬戶緇墽琛屻傚凡緇忕粓姝㈢殑鍜岃繕娌℃湁寮濮嬫墽琛岀殑綰跨▼閮戒笉鑳戒嬌鐢ㄦ寕璧楓俆hread.Sleep錛坕nt x錛変嬌綰跨▼闃誨x姣銆傚彧鏈夊綋璇ョ嚎紼嬫槸琚叾浠栫殑綰跨▼閫氳繃璋冪敤Thread.Interrupt錛堬級(jí)鎴栬匱hread.Abort錛堬級(jí)鏂規(guī)硶錛屾墠鑳借鍞ら啋銆?

銆銆濡傛灉瀵瑰浜庨樆濉炵姸鎬佺殑綰跨▼璋冪敤Thread.Interrupt錛堬級(jí)鏂規(guī)硶灝嗕嬌綰跨▼鐘舵佹敼鍙橈紝浣嗘槸浼?xì)鎶涘嚭ThreadInterupptedException寮傚父錛屼綘鍙互鎹曡幏榪欎釜寮傚父騫朵笖鍋氬嚭澶勭悊錛屼篃鍙互蹇界暐榪欎釜寮傚父鑰岃榪愯鏃剁粓姝㈢嚎紼嬨傚湪涓瀹氱殑絳夊緟鏃墮棿涔嬪唴錛孴hread.Interrupt錛堬級(jí)鍜孴hread.Abort錛堬級(jí)閮藉彲浠ョ珛鍗沖敜閱掍竴涓嚎紼嬨?br />
銆銆涓嬮潰鎴戜滑灝嗚鏄庡浣曚粠涓涓嚎紼嬩腑姝㈠彟澶栦竴涓嚎紼嬨傚湪榪欑鎯呭喌涓嬶紝鎴戜滑鍙互閫氳繃浣跨敤Thread.Abort錛堬級(jí)鏂規(guī)硶鏉ユ案涔呴攢姣佷竴涓嚎紼嬶紝鑰屼笖灝嗘姏鍑篢hreadAbortException寮傚父銆備嬌緇堢粨鐨勭嚎紼嬪彲浠ユ崟鑾峰埌寮傚父浣嗘槸寰堥毦鎺у埗鎭㈠錛屼粎鏈夌殑鍔炴硶鏄皟鐢═hread.ResetAbort錛堬級(jí)鏉ュ彇娑堝垰鎵嶇殑璋冪敤錛岃屼笖鍙湁褰撹繖涓紓甯告槸鐢變簬琚皟鐢ㄧ嚎紼嬪紩璧風(fēng)殑寮傚父銆傚洜姝わ紝A綰跨▼鍙互姝g‘鐨勪嬌鐢═hread.Abort錛堬級(jí)鏂規(guī)硶浣滅敤浜嶣綰跨▼錛屼絾鏄疊綰跨▼鍗翠笉鑳借皟鐢═hread.ResetAbort錛堬級(jí)鏉ュ彇娑圱hread.Abort錛堬級(jí)鎿嶄綔銆?/p>

銆銆Thread.Abort錛堬級(jí)鏂規(guī)硶浣垮緱緋葷粺鎮(zhèn)勬?zhèn)勭殑閿姣佷簡(jiǎn)綰跨▼鑰屼笖涓嶉氱煡鐢ㄦ埛銆備竴鏃﹀疄鏂絋hread.Abort錛堬級(jí)鎿嶄綔錛岃綰跨▼涓嶈兘琚噸鏂板惎鍔ㄣ傝皟鐢ㄤ簡(jiǎn)榪欎釜鏂規(guī)硶騫朵笉鏄剰鍛崇潃綰跨▼绔嬪嵆閿姣侊紝鍥犳涓轟簡(jiǎn)紜畾綰跨▼鏄惁琚攢姣侊紝鎴戜滑鍙互璋冪敤Thread.Join錛堬級(jí)鏉ョ‘瀹氬叾閿姣侊紝Thread.Join錛堬級(jí)鏄竴涓樆濉炶皟鐢紝鐩村埌綰跨▼鐨勭‘鏄粓姝簡(jiǎn)鎵嶈繑鍥炪備絾鏄湁鍙兘涓涓嚎紼嬭皟鐢═hread.Interrupt錛堬級(jí)鏂規(guī)硶鏉ヤ腑姝㈠彟澶栦竴涓嚎紼嬶紝鑰岃繖涓嚎紼嬫鍦ㄧ瓑寰匱hread.Join錛堬級(jí)璋冪敤鐨勮繑鍥炪?/p>

銆銆灝藉彲鑳界殑涓嶈鐢⊿uspend()鏂規(guī)硶鏉ユ寕璧烽樆濉炵嚎紼嬶紝鍥犱負(fù)榪欐牱寰堝鏄撻犳垚姝婚攣銆傚亣璁句綘鎸傝搗浜?jiǎn)涓涓嚎紼嬶紝鑰岃繖涓嚎紼嬬殑璧勬簮鏄叾浠栫嚎紼嬫墍闇瑕佺殑錛屼細(xì)鍙戠敓浠涔堝悗鏋溿傚洜姝わ紝鎴戜滑灝藉彲鑳界殑緇欓噸瑕佹т笉鍚岀殑綰跨▼浠ヤ笉鍚岀殑浼樺厛綰э紝鐢═hread.Priority錛堬級(jí)鏂規(guī)硶鏉ヤ唬鏇夸嬌鐢═hread.Suspend錛堬級(jí)鏂規(guī)硶銆?br />
銆銆Thread綾繪湁寰堝鐨勫睘鎬э紝榪欎簺閲嶈鐨勫睘鎬ф槸鎴戜滑澶氱嚎紼嬬紪紼嬪繀欏誨緱鎺屾彙鐨勩?br />
銆銆Thread.IsAlive灞炴э細(xì)鑾峰彇涓涓鹼紝璇ュ兼寚紺哄綋鍓嶇嚎紼嬬殑鎵ц鐘舵併傚鏋滄綰跨▼宸插惎鍔ㄥ茍涓斿皻鏈甯哥粓姝㈡垨涓錛屽垯涓?true錛涘惁鍒欎負(fù) false銆?br />
銆銆Thread.Name 灞炴э細(xì)鑾峰彇鎴栬緗嚎紼嬬殑鍚嶇О銆?br />
銆銆Thread.Priority 灞炴э細(xì)鑾峰彇鎴栬緗竴涓鹼紝璇ュ兼寚紺虹嚎紼嬬殑璋冨害浼樺厛綰с?br />銆銆Thread.ThreadState 灞炴э細(xì)鑾峰彇涓涓鹼紝璇ュ煎寘鍚綋鍓嶇嚎紼嬬殑鐘舵併?br />銆銆鍦ㄤ笅闈㈢殑渚嬪瓙涓紝鎴戜滑灝嗙湅鐪嬫庝箞璁劇疆榪欎簺灞炴э紝鍦ㄩ殢鍚庣殑渚嬪瓙涓垜浠皢璇︾粏鐨勮璁鴻繖浜涘睘鎬с?br />銆銆鍒涘緩涓涓嚎紼嬶紝棣栧厛寰楀疄渚嬪寲涓涓猅hread綾伙紝鍦ㄧ被寰楁瀯閫犲嚱鏁頒腑璋冪敤ThreadStart濮旀淳銆傝繖涓媧懼寘鍚簡(jiǎn)綰跨▼浠庡摢閲屽紑濮嬫墽琛屻傚綋綰跨▼鍚姩鍚庯紝Start()鏂規(guī)硶鍚姩涓涓柊鐨勭嚎紼嬨備笅闈㈡槸渚嬪瓙紼嬪簭銆?br />

using System;
using System.Threading ;
namespace LearnThreads
{
class Thread_App
{
public static void First_Thread()
{
銆Console.WriteLine("First thread created");
銆Thread current_thread = Thread.CurrentThread;
銆string thread_details = "Thread Name: " + current_thread.Name + "\r\nThread State: " + current_thread.ThreadState.ToString()+"\r\n Thread Priority level:"+current_thread.Priority.ToString();
銆Console.WriteLine("The details of the thread are :"+ thread_details);
銆Console.WriteLine ("first thread terminated");
}

public static void Main()
{
銆ThreadStart thr_start_func = new ThreadStart (First_Thread);
銆Console.WriteLine ("Creating the first thread ");
銆Thread fThread = new Thread (thr_start_func);
銆fThread.Name = "first_thread";
銆fThread.Start (); //starting the thread
}
}
}


銆銆鍦ㄨ繖涓緥瀛愪腑錛屽垱寤轟簡(jiǎn)涓涓猣Thread鐨勭嚎紼嬪璞★紝榪欎釜綰跨▼璐熻矗鎵цFirst_Thread()鏂規(guī)硶閲岄潰鐨勪換鍔°傚綋Thread鐨凷tart() 鏂規(guī)硶琚皟鐢ㄦ椂鍖呭惈First_Thread()鐨勫湴鍧ThreadStart鐨勪唬鐞嗗皢琚墽琛屻?br />
Thread鐘舵?/strong>
銆銆System.Threading.Thread.ThreadState灞炴у畾涔変簡(jiǎn)鎵ц鏃剁嚎紼嬬殑鐘舵併傜嚎紼嬩粠鍒涘緩鍒扮嚎紼嬬粓姝紝瀹冧竴瀹氬浜庡叾涓煇涓涓姸鎬併傚綋綰跨▼琚垱寤烘椂錛屽畠澶勫湪Unstarted鐘舵侊紝Thread綾葷殑Start() 鏂規(guī)硶灝嗕嬌綰跨▼鐘舵佸彉涓篟unning鐘舵侊紝綰跨▼灝嗕竴鐩村浜庤繖鏍風(fēng)殑鐘舵侊紝闄ら潪鎴戜滑璋冪敤浜?jiǎn)鐩稿簲鐨勬栆?guī)硶浣垮叾鎸傝搗銆侀樆濉炪侀攢姣佹垨鑰呰嚜鐒剁粓姝€傚鏋滅嚎紼嬭鎸傝搗錛屽畠?yōu)畣澶勪簬Suspended鐘舵侊紝闄ら潪鎴戜滑璋冪敤resume錛堬級(jí)鏂規(guī)硶浣垮叾閲嶆柊鎵ц錛岃繖鏃跺欑嚎紼嬪皢閲嶆柊鍙樹負(fù)Running鐘舵併備竴鏃︾嚎紼嬭閿姣佹垨鑰呯粓姝紝綰跨▼澶勪簬Stopped鐘舵併傚浜庤繖涓姸鎬佺殑綰跨▼灝嗕笉澶嶅瓨鍦紝姝e綰跨▼寮濮嬪惎鍔紝綰跨▼灝嗕笉鍙兘鍥炲埌Unstarted鐘舵併傜嚎紼嬭繕鏈変竴涓狟ackground鐘舵侊紝瀹冭〃鏄庣嚎紼嬭繍琛屽湪鍓嶅彴榪樻槸鍚庡彴銆傚湪涓涓‘瀹氱殑鏃墮棿錛岀嚎紼嬪彲鑳藉浜庡涓姸鎬併傛嵁渚嬪瓙鏉ヨ錛屼竴涓嚎紼嬭璋冪敤浜?jiǎn)Sleep鑰屽浜庨樆濉烇紝鑰屾帴鐫鍙﹀涓涓嚎紼嬭皟鐢ˋbort鏂規(guī)硶浜庤繖涓樆濉炵殑綰跨▼錛岃繖鏃跺欑嚎紼嬪皢鍚屾椂澶勪簬WaitSleepJoin鍜孉bortRequested鐘舵併備竴鏃︾嚎紼嬪搷搴旇漿涓篠le闃誨鎴栬呬腑姝紝褰撻攢姣佹椂浼?xì)鎶涘嚭ThreadAbortException寮傚父銆?br />
綰跨▼浼樺厛綰?/strong>
銆銆System.Threading.Thread.Priority鏋氫婦浜?jiǎn)绾拷E嬬殑浼樺厛綰у埆錛屼粠鑰屽喅瀹氫簡(jiǎn)綰跨▼鑳藉寰楀埌澶氬皯CPU鏃墮棿銆傞珮浼樺厛綰х殑綰跨▼閫氬父浼?xì)姣斾竴鑸紭鍏堢駭鐨勭嚎紼嬪緱鍒版洿澶氱殑CPU鏃墮棿錛屽鏋滀笉姝竴涓珮浼樺厛綰х殑綰跨▼錛屾搷浣滅郴緇熷皢鍦ㄨ繖浜涚嚎紼嬩箣闂村驚鐜垎閰岰PU鏃墮棿銆備綆浼樺厛綰х殑綰跨▼寰楀埌鐨凜PU鏃墮棿鐩稿杈冨皯錛屽綋榪欓噷娌℃湁楂樹紭鍏堢駭鐨勭嚎紼嬶紝鎿嶄綔緋葷粺灝嗘寫閫変笅涓涓綆浼樺厛綰?鐨勭嚎紼嬫墽琛屻備竴鏃︿綆浼樺厛綰х殑綰跨▼鍦ㄦ墽琛屾椂閬囧埌浜?jiǎn)楂樹紭鍏埦Uх殑綰跨▼錛屽畠?yōu)畣璁╁嚭CPU緇欓珮浼樺厛綰х殑綰跨▼銆傛柊鍒涘緩鐨勭嚎紼嬩紭鍏堢駭涓轟竴鑸紭鍏堢駭錛屾垜浠彲浠ヨ緗嚎紼嬬殑浼樺厛綰у埆鐨勫鹼紝濡備笅闈㈡墍紺猴細(xì)

銆銆Highest
銆銆AboveNormal
銆銆Normal
銆銆BelowNormal
銆銆Lowest


緇撹錛氬湪榪欎竴閮ㄥ垎錛屾垜浠璁轟簡(jiǎn)綰跨▼鐨勫垱寤轟綍綰跨▼鐨勪紭鍏堢駭銆係ystem.Threading鍛藉悕絀洪棿榪樺寘鍚簡(jiǎn)綰跨▼閿佸畾銆佺嚎紼嬪悓姝ヤ綍閫氳銆佸綰跨▼綆$悊綾諱互鍙?qiáng)姝婚攣瑙e喅绛壗{夐珮綰х壒鎬э紝鍦ㄥ悗闈㈢殑閮ㄥ垎鎴戜滑灝嗙戶緇璁鴻繖浜涘唴瀹廣?/p>

]]>
浣跨敤 .NET Remoting 瀹炵幇騫惰璁$畻 [杞琞 http://m.shnenglu.com/xingmuxixi/articles/16092.html閱掔洰瑗胯タ閱掔洰瑗胯タThu, 07 Dec 2006 07:02:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16092.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16092.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16092.html#Feedback0http://m.shnenglu.com/xingmuxixi/comments/commentRss/16092.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16092.html.NET聽Remoting聽浣挎?zhèn)ㄥ彲浠ヨ法澶氬彴璁〗帡鏈鸿嚼L澗榪涜鍒嗗竷璁$畻錛屽彧闇瀹屾垚闈炲父灝戠殑緙栫▼宸ヤ綔銆傚湪鏈枃涓紝Eric聽Bergman-Terrell聽鍒涘緩浜?jiǎn)涓涓悕涓郝燚igits聽of聽Pi聽鐨勫簲鐢ㄧ▼搴忥紝瀹冧嬌鐢ㄥ茍琛岀殑澶氬彴璁$畻鏈轟互涓嶅彲鎬濊鐨勭簿搴﹁綆椔爌聽鍊箋備粬璁炬硶鍦?2聽灝忔椂鍐呭畬鎴愪簡(jiǎn)聽10,000聽浣嶆暟鐨勮綆楋紝鍗村彧浣跨敤浜?jiǎn)鐩稿綋灏戠殑璁〗帡璧勬簮銆傝繖姣旂敤涓鍙拌綆楁満鍗曠嫭瀹屾垚璁$畻蹇簡(jiǎn)聽300錛呫?br />
鍗曞嚮涓嬭澆鏂囦歡涓嬭澆紺轟緥搴旂敤紼嬪簭婧愪唬鐮佸悗錛屾墦寮聽Everything.sln聽瑙e喅鏂規(guī)銆傛瑙e喅鏂規(guī)鍖呭惈榪愯鈥淒igits聽of聽Pi鈥濆簲鐢ㄧ▼搴忔墍闇鐨勪笁涓」鐩紙Client銆丼erver聽鍜屄燬erverLoader錛夈傝繕鍖呭惈涓涓悕涓郝燬impleClient聽鐨勯」鐩紝鎴戜滑紼嶅悗鍐嶈璁哄畠銆傚姞杞鉸燛verything.sln聽涔嬪悗錛岃閫夋嫨聽Build錛堢紪璇戯級(jí)|聽Batch聽Build...錛堟壒緙栬瘧...錛夈傚崟鍑宦燬elect聽All錛堝叏閮ㄩ夊畾錛夋寜閽紝鐒跺悗鍗曞嚮聽Build錛堢紪璇戯級(jí)銆傜紪璇戞墍鏈夊唴瀹瑰悗錛岃鍦ㄦ湰鍦拌綆楁満浠ュ強(qiáng)鎮(zhèn)ㄧ殑聽LAN聽涓殑榪滅▼璁$畻鏈轟笂瀹夎璇ヨ蔣浠躲?br />
鍦ㄦ湰鍦拌綆楁満涓婏紝鍒涘緩涓涓枃浠跺す騫跺皢浠ヤ笅鏂囦歡澶嶅埗鍒板叾涓細(xì)

Server\bin\Release\Plouffe_Bellard.dll
Client\bin\Release\DigitsOfPi.exe

鍦ㄦ瘡涓繙紼嬭綆楁満鍜屾湰鍦拌綆楁満涓婏紝鍒涘緩涓涓枃浠跺す騫跺皢浠ヤ笅鏂囦歡澶嶅埗鍒板叾涓細(xì)

Server\bin\Release\Plouffe_Bellard.dll
ServerLoader\bin\Release\ServerLoader.exe
ServerLoader\ServerLoader.exe.config

鐒跺悗榪愯聽ServerLoader.exe聽紼嬪簭銆傚綋鐒?dòng)灱寴q愯聽ServerLoader聽鍜屄燚igits聽of聽Pi聽紼嬪簭涔嬪墠錛岄渶瑕佸湪姣忓彴璁$畻鏈轟笂瀹夎聽.NET聽Framework銆?br />
鍦ㄦ墍鏈夎繙紼嬭綆楁満鍜屾湰鍦拌綆楁満涓婅繍琛屄燬erverLoader聽紼嬪簭鍚庯紝璇瘋繍琛屄燚igits聽of聽Pi聽紼嬪簭銆傚崟鍑宦燙onfigure...錛堥厤緗?..錛夛紙鍙傝鍥韭?錛夛紝娣誨姞鏈湴璁$畻鏈哄悕鍜岃繙紼嬭綆楁満鍚嶃傚鏋滀笉紜畾鏌愬彴璁$畻鏈虹殑鍚嶇О錛岃鏌ョ湅聽ServerLoader聽紼嬪簭錛屽畠鍦ㄨ〃涓樉紺哄叾璁$畻鏈哄悕銆傚鏋滄?zhèn)ㄥ緢骞笜q愬湴鎷ユ湁涓涓聽CPU聽緋葷粺錛屾?zhèn)ㄥ彧闇涓烘墍鏈壜燙PU聽杈撳叆涓嬈¤綆楁満鍚嶃傚彧闇鍦ㄨ綆楁満鍚嶅悗閿叆聽@聽絎﹀彿鍜屼竴涓紪鍙楓備緥濡傦紝濡傛灉鎮(zhèn)ㄦ嫢鏈変竴涓悕涓衡淏rainiac鈥濈殑鍙屄燙PU聽緋葷粺錛屽垯閿叆浠ヤ笅璁$畻鏈哄悕錛氣淏rainiac@1鈥濆拰鈥淏rainiac@2鈥濄備笉蹇呬負(fù)澶氫釜聽CPU聽緋葷粺杈撳叆澶氫釜璁$畻鏈哄悕錛屼絾鏄繖鏍峰仛鍙互紜繚鎵鏈夎綆楁満鐨劼燙PU聽閮界敤浜庤綆椔爌聽鍊箋傝緭鍏ユ墍鏈夎綆楁満鍚嶅悗錛屽崟鍑宦燨K錛堢‘瀹氾級(jí)銆?br />
鐒跺悗鎸囧畾瑕佽綆楃殑浣嶆暟錛堝弬瑙佸浘聽2錛夊茍鍗曞嚮聽Calculate錛堣綆楋級(jí)銆傝浠庤緝?yōu)畱鐨勪綅鏁板紑濮嬶紝p聽鍊煎皬鏁扮偣鍚庨潰鐨勪綅鏁拌秺澶氾紝紼嬪簭鎵闇鐨勬椂闂村氨瓚婇暱銆?br />
鍥韭?聽鏄劇ず浜?jiǎn)聽Digits聽of聽Pi聽紼嬪簭濡備綍鍦ㄦ湰鍦拌綆楁満鍜岃繙紼嬭綆楁満涓垎閰嶅伐浣滈噺錛屽畠浣跨敤聽TCP/IP聽绔彛聽9000聽鍙戦佽姹傚茍鎺ユ敹緇撴灉銆傛帴涓嬫潵錛屾垜浠皢璇︾粏鎺㈣聽Remoting銆丳louffe_Bellard聽鏈嶅姟鍣ㄥ璞°丼erverLoader聽紼嬪簭銆丼impleClient聽紼嬪簭鍜屄燚igits聽of聽Pi聽紼嬪簭銆?br />
Remoting聽鍩虹
.NET聽Remoting聽浣垮璞″彲浠ヤ笌鍏朵粬瀵硅薄閫氫俊錛屾棤璁哄畠浠繍琛屽湪鍚屼竴鍙拌綆楁満涓婅繕鏄繍琛屽湪榪滅▼璁$畻鏈轟笂銆?NET聽Remoting聽涓幝燱eb聽鏈嶅姟闈炲父綾諱技錛屼絾鏄?NET聽Remoting聽鎶鏈洿閫備簬聽Digits聽of聽Pi聽榪欑瀹屽叏浠ヂ?NET聽緙栫▼璇█緙栧啓鐨勫簲鐢ㄧ▼搴忥紝騫朵笖鍙兘鍦ㄨ繍琛屄?NET聽Framework聽鐨勮綆楁満涓婅繍琛屻傝鍙傞槄鏈枃鏈熬鈥滃叾浠栬祫婧愨濅腑鐨勨淎SP.NET聽Web聽Services聽or聽.NET聽Remoting:聽How聽to聽Choose鈥濓紝瀵逛袱縐嶆妧鏈繘琛屾瘮杈冦偮?br />
鎮(zhèn)ㄥ彲浠ラ氳繃浠ヤ笅姝ラ浣跨敤聽.NET聽Remoting聽璁塊棶榪滅▼瀵硅薄錛?br />
鍒涘緩浠幝燬ystem.MarshalByRefObject聽緇ф壙鐨劼?NET聽鏈嶅姟鍣ㄥ璞÷?DLL)銆傝鏈嶅姟鍣ㄥ璞″皢鍦ㄨ繙紼嬭綆楁満鍜屾湰鍦拌綆楁満涓婅繍琛屻偮?br />鍒涘緩閫氳繃璋冪敤聽RemotingConfiguration.Configure聽鍔犺澆鏈嶅姟鍣ㄥ璞$殑鏈嶅姟鍣ㄥ姞杞藉櫒紼嬪簭銆傛湇鍔″櫒鍔犺澆鍣ㄧ▼搴忎篃灝嗗湪榪滅▼璁$畻鏈哄拰鏈湴璁$畻鏈轟笂榪愯銆偮?br />鍒涘緩浣跨敤聽Activator.GetObject聽璁塊棶鏈嶅姟鍣ㄥ璞$殑瀹㈡埛绔▼搴忋傛?zhèn)ㄩ渶瑕佹坊鍔犲鏈嶅姟鍣ㄥ璞$殑寮曠敤浠ョ紪璇戞紼嬪簭銆傛瀹㈡埛绔▼搴忓彧鍦ㄦ湰鍦拌綆楁満涓婅繍琛屻偮?br />鏈嶅姟鍣ㄥ璞?br />鏈嶅姟鍣ㄥ璞″皢璁$畻鎸囧畾鐨勪節(jié)浣嵚爌聽鍊箋傚畠琚懡鍚嶄負(fù)聽Plouffe_Bellard錛屽洜涓哄畠浣跨敤聽Fabrice聽Bellard聽鐨勫寮虹殑聽Simon聽Plouffe聽綆楁硶銆傝櫧鐒跺瓨鍦ㄦ洿蹇殑綆楁硶錛屼絾聽Plouffe-Bellard聽綆楁硶闈炲父綆鍗曪紙灝戜簬聽300聽琛屾簮浠g爜錛夛紝瀹冧嬌鐢ㄥ皯閲忕殑鍐呭瓨錛屽茍涓旂敱浜庝節(jié)浣嶆暟瀛楀彲浠ュ崟鐙綆楋紝鍥犳鏇撮備簬騫惰鎵ц銆侾louffe_Bellard.CalculatePiDigits聽鏂規(guī)硶灝嗚綆楀湪鎸囧畾浣嶇疆寮濮嬬殑涔?jié)浣嵚爌聽鍊箋備緥濡傦紝CalculatePiDigits(1)聽浠庣涓浣嶅紑濮嬭繑鍥炰節(jié)浣嶆暟瀛楋細(xì)141592653銆侰alculatePiDigits(10)聽浠庣鍗佷綅寮濮嬭繑鍥炰節(jié)浣嶆暟瀛楋紝渚濇綾繪帹銆偮?br />
ServerLoader
ServerLoader聽紼嬪簭灝嗗姞杞芥湇鍔″櫒瀵硅薄錛屾寚瀹氶氳繃聽LAN聽璁塊棶鏈嶅姟鍣ㄥ璞$殑鍗忚鍜岀鍙o紝渚﹀惉鏉ヨ嚜瀹㈡埛绔▼搴忕殑浼犲叆璋冪敤錛屽鐞嗚皟鐢ㄥ茍榪斿洖緇撴灉銆傜壒鍒煎緱娉ㄦ剰鐨勬槸錛屾墍鏈夎繖浜涘彧闇涓琛屼唬鐮佷究鍙畬鎴愶紝鍙渶閫氳繃浣跨敤閰嶇疆鏂囦歡鐨勮礬寰勮皟鐢燫emotingConfiguration.Configure聽鏂規(guī)硶銆係erverLoader聽紼嬪簭灝嗗姞杞藉悕涓郝燬erverLoader.exe.config聽鐨勯厤緗枃浠訛紙鍙傝琛?錛夈傛閰嶇疆鏂囦歡鎸囧畾浠ヂ燬ingleCall聽妯″紡鍔犺澆鏈嶅姟鍣ㄥ璞★紝鍗蟲瘡涓紶鍏ヨ皟鐢ㄩ兘鐢辨湇鍔″櫒瀵硅薄鐨勪竴涓柊瀹炰緥澶勭悊銆傚鏋滄湇鍔″櫒瀵硅薄浠ヂ燬ingleton聽妯″紡鍔犺澆錛屾瘡涓紶鍏ヨ皟鐢ㄩ兘灝嗙敱鍚屼竴涓疄渚嬪鐞嗐傜被鍨嬪睘鎬ф寚瀹氭湇鍔″櫒瀵硅薄鐨勫畬鏁寸被鍨嬪悕縐幫紙鍖呮嫭聽PB聽鍛藉悕絀洪棿錛夊強(qiáng)鍏剁▼搴忛泦鐨勫悕縐般俹bjectUri聽灞炴ф寚瀹氬璞$殑緇熶竴璧勬簮鏍囪瘑絎β?URI)聽鐨勭鐐廣?lt;channel>聽鍏冪礌鎸囧畾浣跨敤聽TCP聽鍗忚錛岀鍙B?000聽璁塊棶鏈嶅姟鍣ㄥ璞°偮?br />
琛?錛歋erverLoader.exe.config銆?br />
<configuration>聽
聽聽<system.runtime.remoting>聽聽
聽聽聽聽<application聽name聽=聽"ServerLoader">聽聽
聽聽聽聽聽聽<service>聽
聽聽聽聽聽聽聽聽<wellknown聽
聽聽聽聽聽聽聽聽聽聽mode="SingleCall"聽
聽聽聽聽聽聽聽聽聽聽type="PB.Plouffe_Bellard,Plouffe_Bellard"
聽聽聽聽聽聽聽聽聽聽objectUri="Plouffe_Bellard"/>聽
聽聽聽聽聽聽</service>聽
聽聽聽聽聽聽<channels>聽
聽聽聽聽聽聽聽聽<channel聽ref="tcp聽server"聽port="9000"/>
聽聽聽聽聽聽</channels>聽
聽聽聽聽</application>聽
聽聽</system.runtime.remoting>
</configuration>聽

SimpleClient
鎴戝垱寤轟簡(jiǎn)涓涓悕涓郝燬impleClient聽鐨勭▼搴忥紝浠ヨ鏄庡鎴風(fēng)紼嬪簭璁塊棶榪滅▼璁$畻鏈轟笂鐨勬湇鍔″櫒瀵硅薄鏄涔堝鏄撱傝榪愯聽SimpleClient錛岄鍏堝湪榪滅▼璁$畻鏈轟笂榪愯聽ServerLoader錛岀劧鍚庡湪鏈湴璁$畻鏈轟笂榪愯聽SimpleClient.exe聽紼嬪簭銆傚湪聽Remote聽Machine錛堣繙紼嬭綆楁満錛夋枃鏈涓緭鍏ヨ繙紼嬭綆楁満鐨勫悕縐幫紝鐒跺悗鍗曞嚮聽Calculate錛堣綆楋級(jí)鎸夐挳寮濮嬭綆楃涓涓節(jié)浣嵚爌聽鍊箋係impleClient聽鐨劼燙alculateButton_Click聽鏂規(guī)硶鍖呭惈瀹㈡埛绔闂繙紼嬫湇鍔″櫒鎵闇鐨勬墍鏈変唬鐮侊紙鍙傝琛?錛夈傚彲浠ヤ嬌鐢ㄧ敱榪滅▼璁$畻鏈哄悕銆佸崗璁?TCP)聽鍜岀鍙e彿聽(9000)聽緇勬垚鐨劼燯RL聽璁塊棶榪滅▼鏈嶅姟鍣ㄣ備緥濡傦紝瑕佽闂垜鐨勨淧entium聽200鈥濊綆楁満錛屽垯聽URL聽涓郝爐cp://Pentium聽200:9000/ServerLoader/Plouffe_Bellard銆傚垱寤郝燯RL聽鍚庯紝灝嗕嬌鐢ㄦ湇鍔″櫒鐨勭被鍨嬄?Plouffe_Bellard)聽鍜屄燯RL聽璋冪敤聽Activator.GetObject銆傜劧鍚庯紝榪斿洖鐨勫艱杞崲涓郝燩louffe_Bellard聽瀵硅薄浠ュ浣跨敤銆傝皟鐢ㄥ叾聽CalculatePiDigits聽鏂規(guī)硶鏃訛紝璇鋒眰琚彂閫佸埌榪滅▼璁$畻鏈轟笂鐨劼燬erverLoader銆傜劧鍚庯紝鏈嶅姟鍣ㄥ璞¤綆楀皬鏁頒綅銆傛渶鍚庯紝鍦ㄤ竴涓枃鏈涓樉紺鴻繑鍥炲鎴風(fēng)紼嬪簭鐨勭粨鏋溿偮?br />
琛?錛氱敤浜庤闂繙紼嬫湇鍔″櫒鐨劼燬impleClient聽浠g爜銆?br />
private聽void聽CalculateButton_Click(object聽sender,聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.EventArgs聽e)
{
聽聽Cursor.Current聽=聽Cursors.WaitCursor;

聽聽Plouffe_Bellard聽PiCalculator聽=聽null;

聽聽String聽MachineName聽=聽RemoteMachineTextBox.Text;

聽聽try
聽聽{
聽聽聽聽int聽port聽=聽9000;

聽聽聽聽String聽URL聽=聽"tcp://"聽+聽MachineName聽+聽":"聽+聽
聽聽聽聽聽聽聽port聽+聽"/ServerLoader/Plouffe_Bellard";
聽聽聽聽PiCalculator聽=聽(Plouffe_Bellard)聽
聽聽聽聽聽聽聽Activator.GetObject(typeof(Plouffe_Bellard),聽URL);
聽聽聽聽ResultsTextBox.Text聽=聽"3."聽+聽
聽聽聽聽聽聽聽PiCalculator.CalculatePiDigits(1);
聽聽}
聽聽catch(Exception)
聽聽{
聽聽聽聽MessageBox.Show(
聽聽聽聽聽聽聽"闇瑕佸湪璁$畻鏈郝?聽+
聽聽聽聽聽聽聽MachineName,聽"Simple聽Client聽涓婅繍琛屄燬erverLoader.exe",聽
聽聽聽聽聽聽聽MessageBoxButtons.OK,聽MessageBoxIcon.Error);
聽聽}

聽聽Cursor.Current聽=聽Cursors.Arrow;
}

Digits聽of聽Pi聽瀹㈡埛绔?br />Digits聽of聽Pi聽瀹㈡埛绔▼搴忔瘮聽SimpleClient聽鏇村鏉傘係impleClient聽浠呴氳繃璁塊棶榪滅▼璁$畻鏈轟笂鐨勬湇鍔″櫒瀵硅薄鏉ヨ綆楀墠涔?jié)浣嵚爌聽鍊箋傝屄燚igits聽of聽Pi聽鍒欏悓鏃朵嬌鐢燙onfigure錛堥厤緗級(jí)瀵硅瘽妗嗕腑鎸囧畾鐨勮繙紼嬭綆楁満鍜屾湰鍦拌綆楁満錛堝鍥韭?聽鎵紺猴級(jí)騫惰璁$畻鐢ㄦ埛鎸囧畾鐨勫皬鏁頒綅銆傛湇鍔″櫒瀵硅薄鍦ㄥ崟鐙殑綰跨▼涓闂紝浠ヤ究鍦ㄥ彲鑳介渶瑕佸緢闀挎椂闂寸殑璁$畻榪囩▼涓繚鎸伮燚igits聽of聽Pi聽GUI聽瀵圭敤鎴鋒搷浣滅殑鍝嶅簲鎬с偮?br />
Digits聽of聽Pi聽浣跨敤鏁扮粍灝嗕綔涓氬垎涓轟節(jié)浣嶆暟鎹潡錛屽皢宸ヤ綔閲忓垎閰嶅埌鎵鏈夊彲鐢ㄧ殑璁$畻鏈轟笂銆傜敤鎴峰崟鍑宦燙alculate錛堣綆楋級(jí)鎸夐挳鍚庯紝灝嗗垱寤郝燬olutionArray錛堝弬瑙佸浘聽4錛夈係olutionArray聽涓鴻璁$畻鐨勬瘡緇勪節(jié)浣嵚爌聽鍊煎垎閰嶄竴涓燬olutionItem聽鍏冪礌銆傛湇鍔″櫒瀵硅薄璁$畻聽m_Digit聽瀛楁鎸囧畾鐨勪節(jié)浣嶆暟緇勫悗錛屾暟浣嶅皢瀛樺偍鍦爉_Results聽鎴愬憳涓俶_MachineName聽鎴愬憳鍖呭惈榪愯鏈嶅姟鍣ㄧ殑璁$畻鏈虹殑鍚嶇О銆傚瓨鍌ㄨ綆楁満鍚嶆槸涓轟簡(jiǎn)浣柯燚igits聽of聽Pi聽鑳藉鏄劇ず姣忓彴璁$畻鏈鴻綆楃殑灝忔暟鎬繪暟錛堝弬瑙佸浘聽2錛夈?br />
涓轟嬌鏈嶅姟鍣ㄥ璞″茍琛岃綆楋紝Digits聽of聽Pi聽灝嗕負(fù)姣忎釜鏈嶅姟鍣ㄥ璞″垱寤轟竴涓嚎紼嬪茍鍚姩綰跨▼璁$畻銆傜劧鍚庯紝蹇呴』絳夊緟鎵鏈夌嚎紼嬪畬鎴愯綆楀悗鎵嶈兘鏄劇ず鏈緇堢粨鏋溿俉aitHandle聽瀵逛簬絳夊緟澶氫釜綰跨▼寰堟湁鐢ㄣ侱igits聽of聽Pi聽灝嗕負(fù)姣忎釜綰跨▼浣跨敤涓涓燱aitHandle錛屼互絳夊緟鎵鏈夌嚎紼嬪畬鎴愯綆椼?br />
灝嗚皟鐢燙alculationThread.Calculate錛堝弬瑙佽〃聽3錛変互渚夸負(fù)姣忎釜鏈嶅姟鍣ㄥ璞″垱寤轟竴涓嚎紼嬨傝鎿嶄綔灝嗗惎鍔ㄧ嚎紼嬭繍琛岋紝鐒跺悗榪斿洖涓涓燗utoResetEvent錛堜粠聽WaitHandle聽琛嶇敓鑰屾潵錛夈傛瘡涓嚎紼嬬殑聽AutoResetEvent聽閮藉瓨鍌ㄥ湪涓涓暟緇勪腑錛岀劧鍚庢暟緇勮浼犻掔粰聽WaitHandle.WaitAll銆傚畬鎴愮嚎紼嬭綆楀悗錛屽皢瀵瑰叾聽AutoResetEvent聽璋冪敤聽Set聽鏂規(guī)硶銆傛渶鍚庝竴涓嚎紼嬭皟鐢燬et聽鏂規(guī)硶鍚庯紝灝嗚繑鍥灺燱aitAll聽璋冪敤錛屽茍鏄劇ず聽p聽鐨勫箋?br />
琛?錛欳alculationThread銆?br />
public聽static聽WaitHandle聽Calculate(
SolutionArray聽solutionArray,聽String聽machineName)
{
聽聽CalculationThread聽calculationThread聽=聽new聽
聽聽聽聽CalculationThread(solutionArray,聽machineName);
聽聽Thread聽thread聽=聽new聽Thread(new聽
聽聽聽聽ThreadStart(calculationThread.Calculate));
聽聽thread.Start();
聽聽return聽calculationThread.calculationDone;
}

姣忎釜綰跨▼閮戒嬌鐢ㄧ浉鍚岀殑綆楁硶錛氬鏋滄湁鏇村鐨勫伐浣滆澶勭悊錛岀嚎紼嬪皢澶哄彇涓嬩竴涓燬olutionItem錛屽湪聽SolutionItem聽涓瓨鍌ㄦ湇鍔″櫒瀵硅薄鐨勮綆楁満鍚嶏紝璁$畻鎸囧畾鐨勪節(jié)浣嶅皬鏁幫紝騫跺皢緇撴灉瀛樺偍鍦燬olutionItem聽涓傛榪涚▼灝嗕竴鐩磋繍琛岋紝鐩村埌鎵鏈壜燬olutionItem聽涓兘濉厖浜?jiǎn)缁撴灉銆傛湁鍏寵緇嗕俊鎭紝璇峰弬瑙佽〃聽4銆?br />
琛?錛欳alculationThread.Calculate銆?br />
public聽void聽Calculate()
{
聽聽Plouffe_Bellard聽PiCalculator聽=聽
聽聽聽聽RemotePiCalculator.GetPiCalculator(
聽聽聽聽聽聽GetRealMachineName(machineName));

聽聽if聽(PiCalculator聽!=聽null)
聽聽{
聽聽聽聽SolutionItem聽I(yíng)tem聽=聽null;
聽聽聽聽bool聽Abort;

聽聽聽聽do
聽聽聽聽{
聽聽聽聽聽聽Abort聽=聽solutionArray.Abort;

聽聽聽聽聽聽if聽(!Abort)
聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽I(yíng)tem聽=聽solutionArray.GetNextItem();

聽聽聽聽聽聽聽聽if聽(Item聽!=聽null)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽I(yíng)tem.MachineName聽=聽machineName;

聽聽聽聽聽聽聽聽聽聽try
聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽I(yíng)tem.Results聽=聽
聽聽聽聽聽聽聽聽聽聽聽PiCalculator.CalculatePiDigits(Item.Digit);
聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽catch聽(Exception聽e)
聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽Abort聽=聽true;
聽聽聽聽聽聽聽聽聽聽聽聽MessageBox.Show(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽"鏃犳硶璁塊棶涓繪満涓婄殑榪滅▼瀵硅薄聽"聽+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽machineName聽+聽Environment.NewLine聽+聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽Environment.NewLine聽+聽"Message:聽聽"聽+聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽e.Message,聽Globals.ProgramName,聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽MessageBoxButtons.OK,聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽MessageBoxIcon.Error);
聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽聽聽UpdateStatisticsDelegate聽USD聽=聽new聽
聽聽聽聽聽聽聽聽聽聽聽聽UpdateStatisticsDelegate(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽MF.UpdateStatistics);

聽聽聽聽聽聽聽聽聽聽MF.Invoke(USD,聽new聽Object[]聽{}聽;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽}
聽聽聽聽}聽while聽(Item聽!=聽null聽&&聽!Abort);

聽聽聽聽calculationDone.Set();
聽聽}
}

涓嬮潰鏄愭鐨勮鏄庯細(xì)

GetRealMachineName聽浠庡聽CPU聽璁$畻鏈哄悕涓垹闄ぢ燖1聽妯″紡銆備緥濡傦紝GetRealMachineName("Brainiac@1"聽榪斿洖聽"Brainiac"銆傛湁鍏沖聽CPU聽璁$畻鏈哄悕鐨勮В閲婏紝璇峰弬瑙佸浘聽1聽瀵硅瘽妗嗕腑鐨勬枃鏈偮?br />鐭ラ亾姝g‘鐨勮綆楁満鍚嶅悗錛屽皢鍏朵紶閫掔粰聽RemotePiCalculator.GetPiCalculator錛岃繖鏍鋒墠鍙互閫氳繃聽PiCalculator聽鍙橀噺璁塊棶璇ヨ綆楁満涓婄殑鏈嶅姟鍣ㄥ璞°偮?br />濡傛灉鐢ㄦ埛鍗曞嚮浜?jiǎn)聽Cancel錛堝彇娑堬級(jí)鎸夐挳錛屽皢璁劇疆聽Abort聽灞炴с傚鏋溌燗bort聽灞炴т負(fù)聽true錛岀嚎紼嬪皢鍋滄璁$畻銆偮?br />瀵孤燤F.Invoke聽鐨勮皟鐢ㄤ嬌綰跨▼鍙互瀹夊叏鍦版洿鏂奧燣istView聽涓殑緇熻鏁版嵁錛堝弬瑙佸浘聽2錛夛紝鍗充嬌璇ヂ燣istView聽鏄敱鍙︿竴涓嚎紼嬪垱寤虹殑銆傚湪聽32聽浣嵚燱indows聽緙栫▼涓紝緇濅笉鍏佽鍦ㄥ垱寤烘煇涓帶浠剁殑綰跨▼涔嬪澶勭悊璇ユ帶浠躲偮?br />瀹屾垚寰幆錛堝嵆璁$畻瀹屾寚瀹氱殑鎵鏈壜爌聽浣嶆暟鎴栬呯敤鎴峰崟鍑宦燙ancel聽[鍙栨秷]聽鎸夐挳錛夊悗錛屽皢璋冪敤綰跨▼鐨劼燗utoResetEvent聽鐨劼燬et聽鍑芥暟銆偮?br />褰撴瘡涓嚎紼嬮兘璋冪敤鍏堵燗utoResetEvent聽鐨劼燬et聽鍑芥暟鍚庯紝灝嗚繑鍥炲聽WaitHandle.WaitAll聽鐨勮皟鐢ㄥ茍鏄劇ず緇撴灉銆偮?br />綰跨▼鍚屾
濡傛灉聽Digits聽of聽Pi聽鐨勪唬鐮佺敱澶氫釜綰跨▼鍚屾椂璁塊棶錛屽彲鑳戒細(xì)鏈夊涓湴鏂瑰嚭鐜伴敊璇備緥濡傦紝濡傛灉涓や釜綰跨▼鍚屾椂璋冪敤聽SolutionArray.GetNextItem錛屽彲鑳戒細(xì)榪斿洖鐩稿悓鐨勫唴瀹廣傝繖灝辨槸鍦燝etNextItem聽鏂規(guī)硶涓緗燵MethodImpl(MethodImplOptions.Synchronized)]聽灞炴х殑鍘熷洜錛岃灞炴у彲浠ョ‘淇濅竴嬈″彧鏈変竴涓嚎紼嬭皟鐢ㄨ鏂規(guī)硶銆傚鏋滄柟娉曠殑姣忎竴琛屼唬鐮侀兘涓嶅簲鐢卞涓嚎紼嬪悓鏃惰闂紝鍒欎嬌鏂規(guī)硶鍚屾鏄竴涓緢濂界殑絳栫暐銆偮?br />
鐢變簬聽MainForm.Calculate聽鏂規(guī)硶鍙湁涓琛屼唬鐮佷笉鑳藉悓鏃惰澶氫釜綰跨▼璁塊棶錛屽洜姝ゅ畠?yōu)畣鍦ㄨ琛屼唬鐮佷箣鍓嶈皟鐢燤onitor.Enter錛屽茍鍦ㄥ叾鍚庤皟鐢燤onitor.Exit銆傚鏋滆琛屼唬鐮佸凡鍦ㄥ叾浠栫嚎紼嬩笂榪愯錛孧onitor.Enter聽灝嗚闃繪銆傚鏋滄暣涓嚱鏁板凡瀹炵幇鍚屾錛岄偅涔堝彧淇濇姢闇瑕侀槻姝㈠涓嚎紼嬭闂殑浠g爜琛屽彲浠ユ彁楂樻ц兘銆?br />
浠幝燬ystem.Windows.Forms.Control聽琛嶇敓鐨勫璞★紙渚嬪聽Button銆乀extBoxe銆丷ichTextBoxe銆丩abel銆丩istBoxe銆丩istView聽絳夌瓑錛夊彧搴旂敱鍒涘緩瀹冧滑鐨勭嚎紼嬪鐞嗐傝浠庨潪鍒涘緩綰跨▼涓畨鍏ㄥ鐞喡燙ontrol聽琛嶇敓瀵硅薄錛岃棣栧厛灝嗗鐞嗕唬鐮佹斁鍏ヤ竴涓柟娉曪紝鐒跺悗涓鴻鏂規(guī)硶澹版槑涓涓唬鐞嗭細(xì)

delegate聽void聽SetResultsTextDelegate(String聽Text);

private聽void聽SetResultsText(String聽Text)
{
聽聽ResultsRichTextBox.Text聽=聽Text;
}

鐒跺悗浣跨敤聽Form.Invoke聽闂存帴璋冪敤璇ユ柟娉曪細(xì)

SetResultsTextDelegate聽SRTD聽=聽new聽
聽聽聽SetResultsTextDelegate(SetResultsText);

Invoke(SRTD,聽new聽object[]聽{聽""聽}聽;

Invoke聽鏂規(guī)硶灝嗕粠鍒涘緩瀹冪殑綰跨▼涓皟鐢ㄨ鏂規(guī)硶錛屽畠浣跨敤鐨勫弬鏁頒笌瀵硅薄鏁扮粍涓殑鍏冪礌鐩稿搴斻?br />
灝忕粨
.NET聽Remoting聽鏄竴縐嶅湪榪滅▼錛堝拰鏈湴錛夎綆楁満涓婃墽琛屼唬鐮佺殑綆鍗曡屾湁鏁堢殑鏈哄埗銆傚彧闇灝嗕唬鐮佸皝瑁呭埌聽.NET聽瀵硅薄涓紝緙栧啓鍔犺澆璇ュ璞″茍渚﹀惉璇鋒眰鐨勭▼搴忥紝鐒跺悗鍦ㄥ鎴風(fēng)紼嬪簭涓皟鐢燗ctivator.GetObject銆傚鏋滄?zhèn)ㄧ殑聽LAN聽涓湁涓浜涢棽緗殑璁$畻鏈猴紝鍙互鍒╃敤瀹冧滑杞繪澗鍦拌В鍐沖茍琛岄棶棰樸傚彧闇璁頒綇瑕佷嬌鐢ㄦ紜殑綰跨▼鍚屾鏈哄埗錛屼互闃叉綰跨▼涔嬮棿鍙戠敓鍐茬獊銆偮?br />
涓嬭澆聽TERRELL.ZIP

鍏朵粬璧勬簮
鈥淎SP.NET聽Web聽鏈嶅姟榪樻槸聽.NET聽Remoting錛氬浣曢夋嫨聽鈥?::URL::http://www.microsoft.com/china/msdn/library/dnbda/html/bdadotnetarch16.asp) 聽涓鏂囧緢鏈夌敤錛屽畠瀵孤?NET聽Web聽Service聽鍜屄?NET聽Remoting聽榪涜浜?jiǎn)姣旇緝銆偮?br />Fabrice聽Bellard's聽Pi聽Page聽(::URL::http://fabrice.bellard.free.fr/pi/) 聽鎻愪緵浜?jiǎn)涓浜涚敤浜庤綆椔爌聽鍊肩殑鏈夌敤鍏紡鍜屾簮浠g爜錛屽寘鎷燚igits聽of聽Pi聽紼嬪簭涓嬌鐢ㄧ殑綆楁硶鐨劼燙聽璇█婧愪唬鐮併偮?br />鏈夊叧榪滅▼璁塊棶紼嬪簭鐨勬簮浠g爜錛岃璁塊棶聽www.personalmicrocosms.com/html/ra.html銆傛紼嬪簭浣跨敤聽.NET聽Remoting聽鏄劇ず榪滅▼璁$畻鏈虹殑妗岄潰錛屽茍浣跨敤鏈湴璁$畻鏈虹殑閿洏鍜岄紶鏍囪繍琛岃繙紼嬭綆楁満銆偮?br />鏈夊叧鏁板鍖栨柟闈㈢殑鍐呭錛岃鍙傞槄聽Petr聽Beckmann聽钁楃殑銆奌istory聽of聽Pi銆嬶紙St.聽Martin's聽Press聽1971聽騫村嚭鐗堬級(jí)錛岃繖鏄竴鏈浉褰撲笉閿欑殑涔︼紝鍥犱負(fù)聽p聽鐨勫巻鍙插氨鏄暟瀛﹀巻鍙茬殑寰鍙嶆槧銆侭eckmann聽鐨勪功娑電洊浜?jiǎn)聽p聽鐨勬暟瀛﹀巻鍙蹭互鍙?qiáng)鏀挎舱d巻鍙層偮?br />Ingo聽Rammer聽鐨勩夾dvanced聽.NET聽Remoting銆嬶紙Apress聽2002聽騫村嚭鐗堬級(jí)鏄湁鍏陳燫emoting聽鐨勬潈濞佹寚鍗椼傛涔︾湅璧鋒潵鏇撮傚悎浠庡ご鍒板熬鐨勮緇嗛槄璇匯傛垜鍊掓槸甯屾湜姝や功鑳藉閫傚悎鎴戠殑鈥滈殢渚跨炕緲燴濈殑闃呰涔?fàn)鎯偮?br />鏈夊叧聽Hardcore聽Visual聽Studio聽.NET聽鍜屄燩innacle聽Publishing聽鐨勮緇嗕俊鎭紝璇瘋闂畠浠殑聽Web聽绔欑偣聽::URL::http://www.pinpub.com/銆?/a>

娉ㄦ剰錛氳繖涓嶆槸聽Microsoft聽Corporation聽鐨劼燱eb聽绔欑偣銆侻icrosoft聽瀵硅绔欑偣鐨勫唴瀹逛笉鎵挎媴璐d換銆?br />
鏈枃杞澆鑷?003聽騫綽?聽鏈堜喚鐨劼燞ardcore聽Visual聽Studio聽.NET銆傜増鏉冩墍鏈壜?003聽Pinnacle聽Publishing,聽I(yíng)nc.錛堥櫎闈炲彟琛岃鏄庯級(jí)銆備繚鐣欐墍鏈夋潈鍒┿侶ardcore聽Visual聽Studio聽.NET聽鏄燩innacle聽Publishing,聽I(yíng)nc.聽鐙珛鍙戣鐨勫垔鐗┿傛湭緇徛燩innacle聽Publishing,聽I(yíng)nc.聽浜嬪厛鍚屾剰錛屼笉寰椾互浠諱綍褰㈠紡浣跨敤鎴栧鍒舵湰鏂囩殑浠諱綍閮ㄥ垎錛堣瘎璁烘枃绔犱腑鐨勭畝鐭紩鐢ㄩ櫎澶栵級(jí)銆傚闇涓幝燩innacle聽Publishing,聽I(yíng)nc.鑱旂郴錛岃鑷寸數(shù)聽1-800-788-1900銆?br />

]]>
[C#瀛︿範(fàn)]鍦ㄥ綰跨▼涓浣曡皟鐢╓informhttp://m.shnenglu.com/xingmuxixi/articles/16086.html閱掔洰瑗胯タ閱掔洰瑗胯タThu, 07 Dec 2006 06:37:00 GMThttp://m.shnenglu.com/xingmuxixi/articles/16086.htmlhttp://m.shnenglu.com/xingmuxixi/comments/16086.htmlhttp://m.shnenglu.com/xingmuxixi/articles/16086.html#Feedback0http://m.shnenglu.com/xingmuxixi/comments/commentRss/16086.htmlhttp://m.shnenglu.com/xingmuxixi/services/trackbacks/16086.html
銆銆鎴戠殑WinForm紼嬪簭涓湁涓涓敤浜庢洿鏂頒富紿楀彛鐨勫伐浣滅嚎紼嬶紙worker thread錛夛紝浣嗘枃妗d腑鍗存彁紺烘垜涓嶈兘鍦ㄥ綰跨▼涓皟鐢ㄨ繖涓猣orm錛堜負(fù)浠涔堬紵錛夛紝鑰屼簨瀹炰笂鎴戝湪璋冪敤鏃剁▼搴忓父甯鎬細(xì)宕╂帀銆傝闂浣曚粠澶氱嚎紼嬩腑璋冪敤form涓殑鏂規(guī)硶鍛紵

銆銆瑙g瓟錛?br />
銆銆姣忎竴涓粠Control綾諱腑媧劇敓鍑烘潵鐨刉inForm綾伙紙鍖呮嫭Control綾伙級(jí)閮芥槸渚濋潬搴曞眰Windows娑堟伅鍜屼竴涓秷鎭車寰幆錛坢essage pump loop錛夋潵鎵ц鐨勩傛秷鎭驚鐜兘蹇呴』鏈変竴涓浉瀵瑰簲鐨勭嚎紼嬶紝鍥犱負(fù)鍙戦佸埌涓涓獁indow鐨勬秷鎭疄闄呬笂鍙細(xì)琚彂閫佸埌鍒涘緩璇indow鐨勭嚎紼嬩腑鍘匯傚叾緇撴灉鏄紝鍗充嬌鎻愪緵浜?jiǎn)鍚屾锛坰ynchronization錛夛紝浣犱篃鏃犳硶浠庡綰跨▼涓皟鐢ㄨ繖浜涘鐞嗘秷鎭殑鏂規(guī)硶銆傚ぇ澶氭暟plumbing鏄帺钘忚搗鏉ョ殑錛屽洜涓篧inForm鏄敤浠g悊錛坉elegate錛夊皢娑堟伅緇戝畾鍒頒簨浠跺鐞嗘柟娉曚腑鐨勩俉inForm灝哤indows娑堟伅杞崲涓轟竴涓熀浜庝唬鐞嗙殑浜嬩歡錛屼絾浣犺繕鏄繀欏繪敞鎰忥紝鐢變簬鏈鍒濇秷鎭驚鐜殑緙樻晠錛屽彧鏈夊垱寤鴻form鐨勭嚎紼嬫墠鑳借皟鐢ㄥ叾浜嬩歡澶勭悊鏂規(guī)硶銆傚鏋滀綘鍦ㄤ綘鑷繁鐨勭嚎紼嬩腑璋冪敤榪欎簺鏂規(guī)硶錛屽垯瀹冧滑浼?xì)鍦ㄨ绾拷E嬩腑澶勭悊浜嬩歡錛岃屼笉鏄湪鎸囧畾鐨勭嚎紼嬩腑榪涜澶勭悊銆備綘鍙互浠庝換浣曠嚎紼嬩腑璋冪敤浠諱綍涓嶅睘浜庢秷鎭鐞嗙殑鏂規(guī)硶銆?br />
銆銆Control綾伙紙鍙?qiáng)鍏秼z劇敓綾伙級(jí)瀹炵幇浜?jiǎn)涓涓畾涔夊湪System.ComponentModel鍛藉悕絀洪棿涓嬬殑鎺ュ彛 -- ISynchronizeInvoke錛屽茍浠ユ鏉ュ鐞嗗綰跨▼涓皟鐢ㄦ秷鎭鐞嗘柟娉曠殑闂錛?br />
public interface ISynchronizeInvoke
{
銆object Invoke(Delegate銆method,object[] args);
銆IAsyncResult BeginInvoke(Delegate銆method,object[] args);
銆object EndInvoke(IAsyncResult result);
銆bool InvokeRequired {get;}
}

銆銆ISynchronizeInvoke鎻愪緵浜?jiǎn)涓涓櫘閫氱殑鏍囧噯鏈哄埗鐢ㄤ簬鍦ㄥ叾浠栫嚎紼嬬殑瀵硅薄涓繘琛屾柟娉曡皟鐢ㄣ備緥濡傦紝濡傛灉涓涓璞″疄鐜頒簡(jiǎn)ISynchronizeInvoke錛岄偅涔堝湪綰跨▼T1涓婄殑瀹㈡埛绔彲浠ュ湪璇ュ璞′腑璋冪敤ISynchronizeInvoke鐨処nvoke()鏂規(guī)硶銆侷nvoke()鏂規(guī)硶鐨勫疄鐜頒細(xì)闃誨錛坆lock錛夎綰跨▼鐨勮皟鐢紝瀹冨皢璋冪敤鎵撳寘鍙戦侊紙marshal錛夊埌 T2錛屽茍鍦═2涓墽琛岃皟鐢紝鍐嶅皢榪斿洖鍊煎彂閫佷細(xì)T1錛岀劧鍚庤繑鍥炲埌T1鐨勫鎴風(fēng)銆侷nvoke()鏂規(guī)硶浠ヤ竴涓唬鐞嗘潵瀹氫綅璇ユ柟娉曞湪T2涓殑璋冪敤錛屽茍浠ヤ竴涓櫘閫氱殑瀵硅薄鏁扮粍鍋氫負(fù)鍏跺弬鏁般?br />
銆銆璋冪敤鑰呰繕鍙互媯(gè)鏌nvokeRequired灞炴э紝鍥犱負(fù)浣犳棦鍙互鍦ㄥ悓涓綰跨▼涓皟鐢↖SynchronizeInvoke涔熷彲浠ュ皢瀹冮噸鏂板畾浣嶏紙redirect錛夊埌鍏朵粬綰跨▼涓幓銆傚鏋淚nvokeRequired鐨勮繑鍥炲兼槸false鐨勮瘽錛屽垯璋冪敤鑰呭彲浠ョ洿鎺ヨ皟鐢ㄨ瀵硅薄鐨勬柟娉曘?br />
銆銆姣斿錛屽亣璁句綘鎯寵浠庡彟涓涓嚎紼嬩腑璋冪敤鏌愪釜form涓殑Close鏂規(guī)硶錛岄偅涔堜綘鍙互浣跨敤棰勫厛瀹氫箟濂界殑鐨凪ethodInvoker浠g悊錛屽茍璋冪敤Invoke鏂規(guī)硶:

Form form;
/* obtain a reference to the form,
then: */
ISynchronizeInvoke synchronizer;
synchronizer = form;

if(synchronizer.InvokeRequired)
{
MethodInvoker invoker = new
MethodInvoker(form.Close);
synchronizer.Invoke(invoker,null);
}
else
form.Close();

銆銆ISynchronizeInvoke涓嶄粎浠呯敤浜嶹inForm涓備緥濡傦紝涓涓狢alculator綾繪彁渚涗簡(jiǎn)灝嗕袱涓暟瀛楃浉鍔犵殑Add()鏂規(guī)硶錛屽畠?yōu)鏄氳繃ISynchronizeInvoke鏉ュ疄鐜扮殑銆傜敤鎴峰繀欏葷‘瀹欼SynchronizeInvoke.Invoke()鏂規(guī)硶鐨勮皟鐢ㄦ槸鎵ц鍦ㄦ紜殑綰跨▼涓殑銆?br />
銆銆C# 鍦ㄦ紜殑綰跨▼涓啓鍏ヨ皟鐢?br />
銆銆鍒楄〃A. Calculator綾葷殑Add()鏂規(guī)硶鐢ㄤ簬灝嗕袱涓暟瀛楃浉鍔犮傚鏋滅敤鎴風(fēng)洿鎺ヨ皟鐢ˋdd()鏂規(guī)硶錛屽畠浼?xì)鍦ㄨ鐢ㄦ堬L(fēng)殑綰跨▼涓墽琛岃皟鐢紝鑰岀敤鎴峰彲浠ラ氳繃ISynchronizeInvoke.Invoke()灝嗚皟鐢ㄥ啓鍏ユ紜殑綰跨▼涓?

銆銆鍒楄〃A:

public class Calculator : ISynchronizeInvoke
{
銆public int Add(int arg1,int arg2)
銆{銆
銆銆int threadID = Thread.CurrentThread.GetHashCode();
銆銆Trace.WriteLine( "Calculator thread ID is " + threadID.ToString());
銆銆return arg1 + arg2;
銆}
銆//ISynchronizeInvoke implementation
銆public object Invoke(Delegate method,object[] args)
銆{
銆銆public IAsyncResult BeginInvoke(Delegate method,object[] args)
銆銆{
銆銆銆public object EndInvoke(IAsyncResult result)
銆銆銆{
銆銆銆銆public bool InvokeRequired
銆銆銆銆{
銆銆銆銆}
銆銆銆}
銆銆銆//Client-side code
銆銆銆public delegate int AddDelegate(int arg1,int arg2);

銆銆銆銆int threadID = Thread.CurrentThread.GetHashCode();
銆銆銆銆Trace.WriteLine("Client thread ID is " + threadID.ToString());

銆銆銆銆Calculator calc;
銆銆銆銆/* Some code to initialize calc */

銆銆銆銆AddDelegate addDelegate = new AddDelegate(calc.Add);

銆銆銆銆object[] arr = new object[2];
銆銆銆銆arr[0] = 3;
銆銆銆銆arr[1] = 4;

銆銆銆銆int sum = 0;
銆銆銆銆sum = (int) calc.Invoke(addDelegate,arr);
銆銆銆銆Debug.Assert(sum ==7);

銆銆銆銆/* Possible output:
銆銆銆銆Calculator thread ID is 29
銆銆銆銆Client thread ID is 30
銆銆銆銆*/

銆銆鎴栬浣犲茍涓嶆兂榪涜鍚屾璋冪敤錛屽洜涓哄畠琚墦鍖呭彂閫佸埌鍙︿竴涓嚎紼嬩腑鍘諱簡(jiǎn)銆備綘鍙互閫氳繃BeginInvoke()鍜孍ndInvoke()鏂規(guī)硶鏉ュ疄鐜板畠銆備綘鍙互渚濈収閫氱敤鐨?NET闈炲悓姝ョ紪紼嬫ā寮忥紙asynchronous programming model錛夋潵浣跨敤榪欎簺鏂規(guī)硶錛氱敤BeginInvoke()鏉ュ彂閫佽皟鐢紝鐢‥ndInvoke()鏉ュ疄鐜扮瓑寰呮垨鐢ㄤ簬鍦ㄥ畬鎴愭椂榪涜鎻愮ず浠ュ強(qiáng)鏀墮泦榪斿洖緇撴灉銆?br />
銆銆榪樺煎緱涓鎻愮殑鏄疘SynchronizeInvoke鏂規(guī)硶騫墮潪瀹夊叏綾誨瀷銆?綾誨瀷涓嶇浼?xì)瀵艰嚧鍦ㄦ墽琛屾椂琚姏鍑哄紓甯稿Q岃屼笉鏄紪璇戦敊璇傛墍浠ュ湪浣跨敤ISynchronizeInvoke鏃惰鏍煎娉ㄦ剰錛屽洜涓虹紪杈戝櫒鏃犳硶媯(gè)鏌ュ嚭鎵ц閿欒銆?br />
銆銆瀹炵幇ISynchronizeInvoke瑕佹眰浣犱嬌鐢ㄤ竴涓唬鐞嗘潵鍦ㄥ悗鏈熺粦瀹氾紙late binding錛変腑鍔ㄦ佸湴璋冪敤鏂規(guī)硶銆傛瘡涓縐嶄唬鐞嗙被鍨嬪潎鎻愪緵DynamicInvoke()鏂規(guī)硶錛?public object DynamicInvoke(object[]
args);

銆銆鐞嗚涓婃潵璇達(dá)紝浣犲繀欏誨皢涓涓柟娉曚唬鐞嗘斁鍒頒竴涓渶瑕佹彁渚涘璞¤繍琛岀殑鐪熷疄鐨勭嚎紼嬩腑鍘伙紝騫朵嬌Invoke() 鍜孊eginInvoke()鏂規(guī)硶涓殑浠g悊涓皟鐢―ynamicInvoke()鏂規(guī)硶銆侷SynchronizeInvoke鐨勫疄鐜版槸涓涓潪鍚屼竴鑸殑緙栫▼鎶宸э紝鏈枃闄勫甫鐨勬簮鏂囦歡涓寘鍚簡(jiǎn)涓涓悕涓篠ynchronizer鐨勫府鍔╃被錛坔elper class錛夊拰涓涓祴璇曠▼搴忥紝榪欎釜嫻嬭瘯紼嬪簭鏄敤鏉ヨ璇佸垪琛ˋ涓殑Calculator綾繪槸濡備綍鐢⊿ynchronizer綾繪潵瀹炵幇ISynchronizeInvoke鐨勩係ynchronizer鏄疘SynchronizeInvoke鐨勪竴涓櫘閫氬疄鐜幫紝浣犲彲浠ヤ嬌鐢ㄥ畠鐨勬淳鐢熺被鎴栬呭皢鍏舵湰韜綔涓轟竴涓璞℃潵浣跨敤錛屽茍灝咺SynchronizeInvoke瀹炵幇鎸囨淳緇欏畠銆?

銆銆鐢ㄦ潵瀹炵幇Synchronizer鐨勪竴涓噸瑕佸厓绱犳槸浣跨敤涓涓悕涓篧orkerThread鐨勫祵濂楃被錛坣ested class錛夈俉orkerThread涓湁涓涓伐浣滈」鐩紙work item錛夋煡璇€俉orkItem綾諱腑鍖呭惈鏂規(guī)硶浠g悊鍜屽弬鏁般侷nvoke()鍜孊eginInvoke()鐢ㄦ潵灝嗕竴涓伐浣滈」鐩疄渚嬪姞鍏ュ埌鏌ヨ閲屻俉orkerThread鏂板緩涓涓?NET worker綰跨▼錛屽畠璐熻矗鐩戞祴宸ヤ綔欏圭洰鐨勬煡璇換鍔°傛煡璇㈠埌欏圭洰涔嬪悗錛寃orker浼?xì)璇诲彇瀹冧滑锛岀劧鍚庤皟鐢―ynamicInvoke()鏂規(guī)硶銆?/p>

]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲欧美国产精品专区久久| 欧美午夜电影完整版| 亚洲国产片色| 欧美成人高清视频| 蜜臀99久久精品久久久久久软件 | 亚洲性线免费观看视频成熟| 日韩一级欧洲| 亚洲欧美三级伦理| 久久黄色级2电影| 欧美成人精品一区二区| 91久久国产综合久久91精品网站| 亚洲精品一区二区三区福利| 夜夜狂射影院欧美极品| 欧美一区二区三区四区在线观看地址| 久久se精品一区二区| 免费亚洲婷婷| 国产精品一区二区a| 在线播放不卡| 亚洲小视频在线观看| 久久青草欧美一区二区三区| 欧美国产综合视频| 亚洲视频专区在线| 久久久在线视频| 欧美日韩大片| 国内揄拍国内精品久久| 国产日韩在线看| 亚洲久久在线| 久久亚洲国产成人| 中文欧美字幕免费| 模特精品在线| 国产日韩一区二区三区在线播放| 亚洲精品国产拍免费91在线| 久久狠狠亚洲综合| 亚洲日本免费电影| 老鸭窝毛片一区二区三区| 国产精品国产三级国产aⅴ无密码| 亚洲国产精品女人久久久| 亚洲欧美精品suv| 亚洲国产日韩一区| 久久久久久一区二区三区| 国产精品久久久久久久9999 | 伊人久久大香线| 亚洲免费视频成人| 亚洲精品乱码久久久久久久久| 欧美一区三区二区在线观看| 欧美色视频一区| 亚洲精品在线电影| 欧美成人精品h版在线观看| 国产一区二区三区高清| 欧美精品久久久久久久久老牛影院| 国产亚洲欧美另类一区二区三区| 亚洲精选中文字幕| 亚洲第一天堂av| 毛片一区二区| 亚洲第一二三四五区| 久久久人成影片一区二区三区| 在线视频精品| 国产精品久久国产精麻豆99网站| 一区二区三区国产在线| 亚洲精品一区二区三区樱花| 欧美成人免费小视频| 亚洲第一天堂无码专区| 免费成人高清在线视频| 久久久亚洲一区| 亚洲大片在线| 亚洲电影视频在线| 欧美成人国产| 日韩亚洲视频| 亚洲免费av片| 国产精品久久久免费| 午夜视频一区在线观看| 亚洲欧美一区二区在线观看| 国产女人精品视频| 久久免费观看视频| 久久天堂国产精品| 亚洲剧情一区二区| 9国产精品视频| 国产精品成人在线| 欧美一区在线视频| 久久久久久尹人网香蕉| 日韩视频一区二区在线观看 | 亚洲影视在线播放| 国产一区二区三区自拍| 欧美国产精品中文字幕| 欧美精品一区二区三| 亚洲欧美在线视频观看| 久久国产精品第一页| 亚洲风情亚aⅴ在线发布| 亚洲黄网站黄| 国产欧美一区二区视频| 欧美成在线视频| 国产精品www.| 欧美成人首页| 国产精品区二区三区日本 | 在线视频中文亚洲| 国产欧美婷婷中文| 亚洲国产精品悠悠久久琪琪 | 欧美专区亚洲专区| 亚洲精品网站在线播放gif| 亚洲一区999| 亚洲第一综合天堂另类专| 欧美精品一区三区在线观看| 欧美视频一区二区三区在线观看| 亚洲欧美日韩区| 久久激五月天综合精品| 亚洲午夜国产成人av电影男同| 久久久水蜜桃av免费网站| 亚洲一区二三| 欧美高清视频一区二区三区在线观看 | 亚洲精品视频啊美女在线直播| 亚洲视频精品| 亚洲精品美女免费| 久久久精品国产免费观看同学| 亚洲午夜性刺激影院| 免费观看成人网| 欧美在线观看视频在线| 麻豆国产精品一区二区三区 | 亚洲一区二区三区高清不卡| 新67194成人永久网站| 欧美日韩 国产精品| 久久精品亚洲一区二区三区浴池| 欧美国产欧美亚洲国产日韩mv天天看完整 | 午夜国产一区| 久久久综合网站| 亚洲性人人天天夜夜摸| 久久免费高清| 午夜日韩福利| 欧美日韩色一区| 亚洲精品视频在线观看网站| 亚洲国产第一| 美女日韩欧美| 欧美福利在线| 亚洲欧洲精品成人久久奇米网| 久久精品日韩欧美| 麻豆精品传媒视频| 亚洲国产天堂网精品网站| 久热成人在线视频| 欧美a级一区| 亚洲激情欧美| 欧美日本一区二区高清播放视频| 91久久综合| 亚洲视频专区在线| 国产精品久久久久久模特| 亚洲一区三区视频在线观看| 欧美一区视频| 激情一区二区三区| 免费日韩视频| 99国内精品| 欧美一区二区高清| 一区二区三区在线视频播放| 久久综合伊人77777尤物| 亚洲国产成人久久| 亚洲一二三四久久| 国产欧美一区二区三区另类精品| 久久gogo国模啪啪人体图| 欧美暴力喷水在线| 亚洲日本中文字幕| 久久一区中文字幕| 亚洲狠狠婷婷| 国产精品videossex久久发布| 一本色道久久综合亚洲精品按摩| 久久se精品一区精品二区| 亚洲福利视频三区| 欧美日韩三级| 久久久久久久综合色一本| 亚洲人成在线播放| 欧美一级淫片播放口| 亚洲国产另类久久久精品极度| 欧美绝品在线观看成人午夜影视| 亚洲影视九九影院在线观看| 免费中文日韩| 亚洲私人影院在线观看| 黄色国产精品| 欧美日韩国产区一| 久久成人亚洲| 99re热这里只有精品视频| 久久久久久亚洲精品杨幂换脸| 亚洲精品资源美女情侣酒店| 国产精品一区视频| 巨乳诱惑日韩免费av| 亚洲欧美文学| 亚洲精品在线视频| 久久久久久久久一区二区| 99精品国产99久久久久久福利| 国产亚洲精品久久飘花| 欧美日韩国产免费| 男女av一区三区二区色多| 亚洲欧美99| 99成人在线| 最新高清无码专区| 久久综合久久综合这里只有精品| 在线视频精品一| 亚洲黄色精品| 在线播放日韩| 激情成人在线视频| 国产欧美一区二区精品性| 国产精品高潮粉嫩av| 欧美日韩国产一级| 欧美精品日韩一本| 欧美大色视频|