Win32
FlushFileBufferは書き出しを待つのでとてつもなく遅い。New_Lineごとに呼んだりすると馬鹿を見る。 WriteConsole/ReadConsoleは端末(cmd.exeのスクリーンバッファとかキー入力)以外のハンドルを渡すとエラーリターンしてくるまで遅い。まさかcmd.exeと通信…
いきなり脱線ですが……。 System.pasの{$IFDEF PC_MAPPED_EXCEPTIONS}は、名前の通りプログラムカウンタ=インストラクションポインタから例外ハンドラを探す、つまりはgccで言うzero-cost-exceptionだと想像できるのですが、この$IFDEFが、Windowsの時にも書…
最近ここに何か書く暇があまり無くて調べたらすぐわかるようなAdaネタでお茶を濁していたわけですが、気がつくと何も書けなくなってきている気がしてきたので、リハビリがてらになにか短期シリーズやろうと思いました。 ネタは……探すか……きょろきょろ……うろ…
dwWakeMaskを0にしててもWAIT_OBJECT_0 + nCountで返ってくる時があるのな。 Thebeフリーズの本質的な原因はこれでした。(49.1は対処療法でした) WaitFor系は全部MsgWaitForMultipleObjectsExだけでいいじゃん、でコード書いてる人は注意…っていないか。
QueueUserAPCだのRegisterWaitForSingleObjectだのって、実は理解すればとても使える仕組みなんじゃなかろうか、と思うこの頃。(理解できない) TMultiReadExclusiveWriteSynchronizerのTryBeginWriteがあるバージョンが必要で、今まではクリティカルセクショ…
thebe.exeやeofile.exeが複数起動された場合、ThebeではWM_COPYDATA、EOFileではDDEによって、元からあるプロセスに通知を行い、元からあるプロセスが新しくスレッドを作りウィンドウを開きます。 この時、元からあるプロセスは、当然フォアグラウンドでは有…
というわけでModern C++ Design*1を引っ張り出してきて、起きた頭で書き直し。 type TFixedMemoryManager = object private Memory: Pointer; UnitSize: Cardinal; First: Pointer; Last: Pointer; public constructor Initialize(AUnitSize: Cardinal); des…
眠い頭で二時間ぐらいで書いてみました。 type TFixedMemoryManager = object private Memory: Pointer; UnitSize: Cardinal; First: Pointer; Last: Pointer; CachedBlock: Pointer; public constructor Initialize(AUnitSize: Cardinal); destructor Final…
EOFileのレビューをしていただいている(とても貴重な)サイトから。*1 この方もファイラーを作っておられるようなのですが…http://xinn.homeip.net:8888/pukiwiki/pukiwiki.php?WinEF シェルの名前空間に対応しました。速度はdirlistより少し劣る感じ。 マイ…
http://www.geocities.co.jp/SiliconValley-Sunnyvale/8635/ あたりで読んだ記憶から。 だーっと並べるような関数に__declspec(dllexport)つけておいて、.exe自身をGetModuleHandleで得れば、GetProcAddressで名前から関数アドレスが引けます。 元は、F-BASI…
MMXは実は使ったことがないのでメモ。 Delphi6以降はインラインアセンブラがMMX対応、っと。 MMXの解説は以下のページがわかりやすいです。http://www1.kcn.ne.jp/~robe/pf/pf009.htmlDelphiの例。インラインアセンブラでMMXが使えなかった時代のものですの…
Windows2000ではゴミ箱をデスクトップから消しているとSHSpecialFolderLocationで取得ができなくなるらしい。 (というより本来非表示にできないものを、レジストリを消すとかして取得をできなくすることで非表示にしてるんでしょうね。その手のツールはよく…
http://lamoo.s53.xrea.com/diary/diary.html純粋に感心するしかない…。 私もファイラー作者ならこの程度は知っておかねばならないのでしょうか?
用意した武器はMicrosoft Visual C++ Toolkit 2003。 ターゲットはtest.exe。(↓) #include #include int main() { for(;;){ std::cout GetTickCountを以下のようにせよ! unsigned d_GetTickCount() { return p_GetTickCount() / 2; } まずは普通に(!?)ker…