c++に関するmaruguuのブックマーク (5)

  • Windowのクラス化

    このアーカイブの無断配布は禁止します。ただしプログラムのソースそのものは自由に改変したり利用するのは構いません。ただし、このプログラムによって生じる一切の不具合、影響などに関する損害は当方は一切感知いたしません。 Windowの生成処理(当サイトのDirectX Tipsの準備講座第二回参照)を見てもらえば処理自体はシンプルなものであると分かる(昔はすごく複雑に感じたのだけれど・・・)。関数が最低二個もあればWindowは作れます。では、これをクラス化するのは容易だろう・・・、と思いました。が、ウィンドウプロシージャがCALLBACK関数のためそのままでは組み込めません(エラーは出ませんが処理はうまくいかないはず)。はじめ、私はどこかでstaticをつけると動くと聞いたので試してみました(下記イメージ�@)。しかし、これではウィンドウプロシージャ内の変数は当然staticでなきゃいけま

  • UNIX上でのC++ソフトウェア設計の定石 (5) - memologue

    鉄則5: スレッドの「遅延キャンセル」も出来る限り避けて通ろう スレッドの非同期キャンセルとは:あるスレッドが別のスレッドに処理の中断を依頼すること 遅延キャンセルは、規格の自由度が比較的高いため、OSやCライブラリのバージョンにより動作がまちまち 環境によらず安定した動作を得るには、使用する環境の詳しい調査や、Cライブラリの抽象化作業、条件コンパイルなどが必要 C++では、「キャンセル発生時のオブジェクトの解体」を、移植性のある方法で実現できない 慎重に使用すること。C++では使用しないこと 説明: スレッドのキャンセルに「非同期」「遅延」の二種類があることはすでに述べた通りで、またこの「非同期キャンセル」が非常に厄介な数々の問題を引き起こす元凶であることも、既に述べました。 さて今回は「遅延キャンセル」を扱います。遅延キャンセルは、非同期キャンセルほど様々な問題は引き起こさないのですが

    UNIX上でのC++ソフトウェア設計の定石 (5) - memologue
    maruguu
    maruguu 2009/02/26
    C++と遅延キャンセルの相性の悪さについて/1. 遅延キャンセルが実行される際、スタック上のオブジェクトのデストラクタが呼ばれるかどうか環境依存 2. pthread_cleanup_push/pop関数とC++の例外機構がどう相互作用するか環境依存
  • Just a moment...

    maruguu
    maruguu 2009/02/26
    C++とpthread_cancel()の相性が悪いという証言(根拠なし)/For a thread killed by pthread_cancel()... um... IMHO that is typically an evil thing to do... and I have never had to use that function call.
  • codepad

    codepad is an online compiler/interpreter, and a simple collaboration tool. Paste your code below, and codepad will run it and give you a short URL you can use to share it in chat or email. Language: C C++ D Haskell Lua OCaml PHP Perl Plain Text Python Ruby Scheme Tcl

    maruguu
    maruguu 2009/02/18
    ブラウザ上でコードの動作結果を確認できる/ほかの人との共有もできる
  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
    maruguu
    maruguu 2008/12/19
    シグナルハンドラで行ってよい処理の説明
  • 1