Windows

timeもどき

なんかCygwin bashのtimeコマンドがまともな結果を返さないので、自分で作りました。 エラーチェックがテキトーとか、分の表示が0固定とか、やっつけコードですが、貼っときます。 #include <stdio.h> #include <stdlib.h> #include <windows.h> FILETIME diff_time(const FILETIME* lhs, c</windows.h></stdlib.h></stdio.h>…

ERRORLEVEL

bjamのbuild.batを見ると、「setlocal & endlocal」でERRORLEVEL*1を0にクリア、「set _error_=」で1にセットしているつもりのようですが、これ動きませんね。 OS setlocal & endlocal set _error_= 2000 影響なし ERROR_LEVEL=1 XP 影響なし ERROR_LEVEL=1 …

get_message_iterator

なんとなくWindowsのメッセージループを反復子にするアイデアを思いついたので書いてみました。 役に立つかは不明です。 以下、コード。

ハンドルの継承とマルチスレッド

今日は子プロセス問題のWindows版についてです。 Windowsで子プロセスと標準入出力を使って通信するためには、通常、 親プロセスが無名パイプを作成する パイプの一端のハンドルを「継承可能」にする STARTUPINFO構造体のhStdInput等に継承可能にしたパイプ…

sound_playerのリライト完了

サンプルsound_playerをWin32 GUI Genericsを使わずに書き直しました。 libs/audio/example/win32/sound_player/ Win32 APIを直接読んでいること以外は、元のコードとほぼ同じです。 ついでにWAVファイルにも対応しています。 Jamfile.v2はこうなっています…

GWLP_USERDATA

昨日せっかくstdcall_thunkを作ったのですが、今回は使わないことにしました。 というのも、ウィンドウクラスは「クラス」であるはずなのに、サンクでインスタンスと結び付けてしまうと、「クラス」でなく「インスタンス」になってしまう気がしたからです。 …

stdcall_thunk

昨日のクラス名が長すぎる問題ですが、早速 direct_sound_buffer → direct_sound_sink direct_sound_capture_buffer → direct_sound_source に変更しました。 これで、vc8ideディレクトリ配下以外は、inspectに引っかからなくなりました。 vc8ideディレクト…

\WINDOWS\SYSTEM32\CONFIG\SYSTEM

友人から \WINDOWS\SYSTEM32\CONFIG\SYSTEM が壊れたとの連絡を受け、 http://support.microsoft.com/kb/436927/ja に従って修復を試みたところ、見事に失敗しました。 XPのロゴが出た後、メッセージボックスが出てすぐにリブートするようになり、回復コンソ…

続々 Cygwin vs Fiber

やっぱりスタックをコピーするだけでは駄目なようなので、諦めてスレッドを使った実装を追加しました。 <hamigaki/coroutine/detail/thread_coroutine.hpp> 実装にBoost.Threadを使ったので、別途ライブラリのリンクが必要です。 コルーチンが別スレッドで動作するため、呼び出し元とスレッド固有領域が別にな</hamigaki/coroutine/detail/thread_coroutine.hpp>…

続 Cygwin vs Fiber

とりあえず昨日の戦略でうまくいきました。(9/2追記: バグってました。クラッシュします。) <hamigaki/coroutine/detail/cygwin/cyg_tls.hpp> 怪しげなキャストでファイバコンテキストの中身にアクセスしている箇所はOSのバージョンによっては動かないかもしれません。これは要調査、と。 実装で問題になっ</hamigaki/coroutine/detail/cygwin/cyg_tls.hpp>…

Cygwin vs Fiber

そもそもCygwinではFiberが動かないようです。 http://www.cygwin.com/ml/cygwin/2004-12/msg00085.html MLの投稿にレスも付いてませんし、このコードは今のバージョンでも動きません。 いろいろ試した結果、ファイバ関数の中でCRT関数を呼ばない限り落ちな…

PlaySound

ドキュメントの量が増えるにつれて、ドキュメントのビルド時間も長くなりました。 ビルド中はWebを見たり、本を読んだりしているわけですが、気が付いたらビルドはとっくに終わっていたなんてこともしばしば、、、。 そこで、id:ir9Ex:20060705 さんの記事を…

続 レジストリキーの列挙

昨日のregistry_key_iteratorですが、 class registry_key : boost::noncopyable { public: registry_key( ::HKEY parent, const std::string& sub_key, ::REGSAM sam) boost::optional<std::string> sub_key_name(::DWORD index) const; };のようなレジストリキーのクラ</std::string>…

レジストリキーの列挙

そろそろASIOの初期化を修正しようと思います。 CLSIDを直指定だと、いつまでたってもテストコードをパッケージに追加できないのです。ASIOのドライバを検索するためには、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\ASIO配下のキーを列挙する必要があります…

続cdecl_thunk

昨日のcdecl_thunkを使うと、ASIOのコールバック関数は次のようになります。 struct asio_callbacks { cdecl_thunk<2> buffer_switch; cdecl_thunk<2> sample_rate_changed; cdecl_thunk<4> asio_message; cdecl_thunk<3> buffer_switch_time_info; };sample…