2001/11/26
別スレッドに、ダイレクトに例外を発生させる方法です。
実用目的で使って損害が発生しても知りません。ああ、こういうことも不可能ではないな、という話です。
たとえば、該当スレッドがNTカーネルの中に入っていたり、何かをロックしたりしたら、大変やばいと思われます。
Win32、および例外の実装に依存しています。
setjmp, longjmpを使用して、同じことがCでも実装できるかもしれませんが、詳細は控えます
リソースの解放とか、CreateThreadで作ったスレッドからのライブラリ関数呼び出しとか、あまり突っ込まないでください
throw.zip (実行ファイル+ソースコード:18K)
throw.cpp (ソースコードをテキスト形式で)
実行したら、ワーカスレッドが構築され、while(1) i++; を実行し続けます。改行を押すと、そのスレッドに例外を発生させ、実行を中断します。
ワーカスレッドのeipを書き換え、dothrow() { throw XXX;} 関数の始まりに起きます。単純明快です。