著作一覧 |
volatile done; ... done = false; lock(this) { // ワーカスレッドで時間がかかる処理をInvoke using (new Timer(delegate(object o) { lock(o) { Monitor.Pulse(o); } }, this, 3000, Timeout.Infinite)) { Monitor.Wait(this); } if (!done) { Console.WriteLine("timeout"); // ワーカスレッドの始末をどうつけるかは別の問題 } }後でやばいと思ったけど、この利用方法ならやばくないか。ちょっと安心。
using System; using System.Threading; public class Ts { volatile bool done; public void foo() { int i = 0; lock(this) { using (new Timer(delegate(object o) { lock(o) { if (i < 5) { i++; } else { done = true; } Monitor.Pulse(o); } }, this, 3000, 1000)) { do { Console.WriteLine(i + "..."); Monitor.Wait(this); } while (!done); } } } public static void Main() { Ts t = new Ts(); t.foo(); } }
using System; using System.Threading; public class Ts { public void foo() { lock(this) { using (new Timer(delegate(object o) { lock(o) { Monitor.Pulse(o); } }, this, 3000, Timeout.Infinite)) { Console.WriteLine("Now I've prepared some async procs"); } Monitor.Wait(this); Console.WriteLine("Can I reach here ?"); } } public static void Main() { Ts t = new Ts(); t.foo(); } }
volatileとかlock(synchronized)とかつらつらと眺めるに、C++でWin32のネイティブスレッドを扱ってたときのほうが楽だったな。VMは難しい。
new Timer(delegate (object o) { ((Timer)o).Dispose(); // 何か仕事する。 }).Change(TIMEOUT_VALUE, Timeout.Infinite);
while (!received) { ; }volatile付けないと
ld ax, _received jnz 1$ 0$ jmp 0$ 1$とかなったはず。
まるで最初のWizardryの味のあるイラスト付きマニュアルが、ベインに変わったかのような(というか、3D風味なのでUOというか)、感じを受ける。
Compilers: Principles, Techniques, and Tools(Aho, Alfred V.)
というか、31位とは売れてるなぁ。
ジェズイットを見習え |
お、もう入手できました? 私のamazonの注文は2006/9/23 - 2006/10/7に発送予定になってますがまだ未発送です……
え、今確認したら私の注文では11月ですよ orz<br>ひょっとして注文しなおしたほうが早く来たりして…
あ、今です。AmazonからDMが来たから注文ついでに貼っただけです。(インドは今日届きました)
(今です……ってわけわからねぇ。注文したのが今、というか貼ったときです)
なんでまとめて書かねぇんだ? >おれ<br>発送予定日は、2006/10/10 - 2006/10/18 です。
Amazonに「ごるぁ」メッセージ入れたら、出荷予定時期が変わりました(笑)。下手に早めに予約していると後回しになったりするんですよね。konozamaと呼ばれる所以。
ああ、そういう意味だったのかぁ。(字面の意味、今気付いた)