2008年11月29日土曜日
2008年11月27日木曜日
nested_exception の例
nested_exception の良い例を作成せよと、指令が出ていたけど、漫然と思い当たるところを書き散らしてみる。ちなみに、良い例なんて思いつきません(爆)。
外部から安全にスレッドを中断させる方法が無い Windows では、boost::thread のinterruption において、例外を流用するというトリッキーで賢い方法を採用しています。
std::exception から派生すると、途中で例外をキャッチした後に、thread_interrupted かどうかを調べて、例外の再送をしないといけないので面倒です。MIXIN 用との事だけど、このように例外もグループ化できれば、さぞかし便利な場面があるのかもしれない・・・という感覚だけは残ります。
で、更に進めて、階層化できた方が面白いんじゃなかろうか?って感じて、考えたのが下。
階層で捕まえたければ
ネストで捕まえたければ
と、こんな感じ。あんまり面白くないか…。
外部から安全にスレッドを中断させる方法が無い Windows では、boost::thread のinterruption において、例外を流用するというトリッキーで賢い方法を採用しています。
class BOOST_THREAD_DECL thread_interrupted
{};
std::exception から派生すると、途中で例外をキャッチした後に、thread_interrupted かどうかを調べて、例外の再送をしないといけないので面倒です。MIXIN 用との事だけど、このように例外もグループ化できれば、さぞかし便利な場面があるのかもしれない・・・という感覚だけは残ります。
で、更に進めて、階層化できた方が面白いんじゃなかろうか?って感じて、考えたのが下。
template<int LEVEL>
class level_exception : public std::nested_exception {
public:
int level() const { return LEVEL; }
bool deeper( int level ) const { return level >= LEVEL; }
};
階層で捕まえたければ
} catch( level_exception<3>& le ) {
...
}
ネストで捕まえたければ
} catch( nested_exception& ne ) {
if( ne.deeper( 3 ) ) {
...
} else {
throw;
}
}
と、こんな感じ。あんまり面白くないか…。
2008年11月26日水曜日
線引き
何について書いたら良いのか悩みますが、今回は、インターネットを使う上での線引きを自分の中ではしているので、その点について書いてみます。
絶対に避けているものが3つ。
2は、携帯電話における個人情報の取り扱いは出鱈目もいいところで、基本の設定は固有IDを送信します。私はAUの携帯を利用していますが、IDを非送信にするURLは非公開ですし、アクセスしてもエラーを頻発するような代物で、DoCoMoに関しては ?GUID=ON のパラメータを付加すれば問答無用で固有IDを送信する状況です。クッキーが無いので、これをサービス提供側(コンテンツ配信側)がアクセス解析に利用するのは自然な流れで、ここまでは私も問題にせずEZウェブも利用しています。しかし、携帯電話に個人情報を入力するとなると話は別です。携帯電話のメールアドレスを使ってサービスを享受するとか、個人情報を必要とする会員制サイトは、全く利用していません。
3は、利用しても良いとは思っているけど、ITのプログラミングを職業とするプロでさえオンライン・バンクインターネット・バンキングを安全に利用する自信が持てないという事です。私の所属するカヌークラブにて、会費をオンラインバンクを利用して収集できればいいのでは?という話になったことがありました。しかしプロの立場から見て、パワーユーザ以下のユーザがオンラインバンクインターネット・バンキングをするのは、極めて危険が高いという判断から、導入させませんでした。実際、多くの知り合いがスパイウェアの類に感染しておりました。
絶対に避けているものが3つ。
- クラウドの世界をデスクトップに持ち込む事
- 携帯電話で個人情報を入力する事
オンライン・バンクインターネット・バンキング(銀行)
2は、携帯電話における個人情報の取り扱いは出鱈目もいいところで、基本の設定は固有IDを送信します。私はAUの携帯を利用していますが、IDを非送信にするURLは非公開ですし、アクセスしてもエラーを頻発するような代物で、DoCoMoに関しては ?GUID=ON のパラメータを付加すれば問答無用で固有IDを送信する状況です。クッキーが無いので、これをサービス提供側(コンテンツ配信側)がアクセス解析に利用するのは自然な流れで、ここまでは私も問題にせずEZウェブも利用しています。しかし、携帯電話に個人情報を入力するとなると話は別です。携帯電話のメールアドレスを使ってサービスを享受するとか、個人情報を必要とする会員制サイトは、全く利用していません。
3は、利用しても良いとは思っているけど、ITのプログラミングを職業とするプロでさえ
Windows Vista は眠らない その3
前回からの続き、UACを無効にしたものの状況は改善しているとは言えない。もちろん、くそUACにはサッサと逝ってもらって良かったと思っている。しかし、相変わらず、いつまでたってもシャットダウンやログオフできない時がある。あれからも、電源ボタンを長押しして強制オフの刑を実行し、強制チェックディスクの刑を頻繁に食らったりしている。
パソコンを買うときに、WindowsXPへのダウングレード権は、人間らしいパソコン生活を送るためには欠かせない権利だとしか言いようがない。頼むよ、マイクロソフト。
パソコンを買うときに、WindowsXPへのダウングレード権は、人間らしいパソコン生活を送るためには欠かせない権利だとしか言いようがない。頼むよ、マイクロソフト。
2008年11月25日火曜日
boost thread interruption
#include <iostream>
#include <boost/thread.hpp>
void f() {
while( 1 ) {
std::cout << "interrupt OK" << std::endl;
{
boost::this_thread::disable_interruption di;
std::cout << "interrupt NG" << std::endl;
boost::this_thread::interruption_point();
{
boost::this_thread::restore_interruption ri(di);
std::cout << "interrupt OK" << std::endl;
}
std::cout << "interrupt NG" << std::endl;
}
std::cout << "interrupt OK" << std::endl;
boost::this_thread::interruption_point();
}
}
int main() {
boost::thread t(f);
t.interrupt();
t.join();
return 0;
}
おおーっ、スゲー。windowsでも中断するよ!disable_interruption の意味がいまいち、よくわかんねーけど、規模が大きくなったら効いてくるのかな?
登録:
投稿 (Atom)