|
HMDT - Back Number / August, 2001 |
August, 2001
Cocoa 1001、コンテキストメニューの話の続き。ちょっとだけ。 NSMenu を用いた、コンテキストメニューを表示する方法です。実は、昨日から取り組んでいるのは、マウスを押しっぱなしにして、数秒後にコンテキストメニューを表示させる方法。ほら、IE とかでやられているようなやつ。あれをやろうとしていたんだよね。始めは mouseDown をオーバーライドすりゃ簡単じゃーん、って思ってたんだけど、どうもうまくいかない。ボタン押しっぱなしだと、mouseDown から抜けてこないんだね。中で while loop 回してるな、きっと。うーん、どうするのがいちばん手がかかんないかな。mouseDown を完全にこっちで再現してしまえばいいんだけど、それもちょっといやだしねー。
Cocoa 1001、コンテキストメニューの話っす。 環境が快適なっても、なかなかペースに乗れないよ。あー、時間が欲しいなぁ、、、
察しがいいので反応する。PowerBook に入れたときはスリープさせるな。もちろん、「まだ」な!
Cocoa 1001 NSCell の続き。今回はセルの中身を描く話。 サンプルプログラムがついてるんだ。Apple から提供されている、OutlineView ってのがあるよね。フォルダのツリー構造を NSOutlineView で表示するやつ。あれに手を加えて、アイコンを表示させるようにしてみたよ。パフォーマンスが悪いところは、改善の余地あり。 金曜日に Apple から「ある物」が届いたので、インストールしてみた。うぉぉぉっ!これは快適だ!うそじゃなかった!始めからこのくらいで動いてほしかったよなー。期待して待て!
Cocoa 1001 NSCell の続きです。きょうはセルが保持する値の話。 これ、API ドキュメントだけではいまひとつ分かりにくいんだけど、ヘッダと照らし合わせると、理解できるんだな。
お久っ!Cocoa 1001 だよ。だいぶ久しぶりの気がするな。NSCell 関係に手を入れてみました。今回は導入編というところで。 まだまだ、続くよっ!でも、最近更新頻度が落ちてるから、期待しないで待っててくれ。
Apple から、Mac OS 9 と Mac OS X のスレッド・アーキテクチャに関するドキュメントが公開されたよ。Mac OS X のスレッド・アーキテクチャに関するところは、なかなか面白い。Mac OS X では、5 つの異なるスレッド API が実装されていることになるんだ。Mach、pthread、Cocoa、Carbon MP、Carbon cooperative だ。これらを全部動かそうってんだから、けっこう無茶なことやるね。 基本的に、これらの API は階層的に配置されている。一番下が Mach、その上に pthread。あとの 3 つは pthread の上に配置される。その状態を表しているのが、下の図だ。 ![]() さて、Cocoa プログラムでは、Cocoa API スレッド(NSThread)と、pthread のどちらでも使っていい、と書いてある。ここではそれらの API を比較してみて、どっちを使うべきか考えてみよう。pthread API は、/usr/include/pthread.h から、NSThread はドキュメントから調べることができるよ。 pthread のうち、スレッドの生成、操作に関わる API は以下の通り。
そして、NSThread の API は以下の通り。
おそらく、NSThread の currentThread は pthread_self() を使って、exit は pthread_exit() を使ってるでしょう。注目すべきは、スレッド生成用の API だ。 NSThread で、新しいスレッドを生成する API は detachNewThreadSelector だけだ。これは、名前の通り、新しいスレッドを作って detach(親スレッドから切り離す)する。たぶん、pthread_create() と pthread_detach() を使っているね。で、NSThread には join 系の API がないんだ。つまり、NSThread を使う限り、作られるスレッドは常に detach されてて、join されてるスレッドは作れないことになる。 join は UNIX でいうところの WAIT に相当するものだ。これを使うと、親スレッドは子スレッドの終了を待つことができる。たとえば、シェルでプロセスを起動すると、明示的に切り離さない限り、子プロセスが終了するまで待ってるでしょ。あんな感じだ、たぶん。 このような、UNIX 的なスレッドの親子関係を意識したいときは pthread を、そうじゃないときは NSThread を使う、といった感じで使い分ければいいのかな。
|
|
Home | Link | Download | Back Number | Speciall Issue
|