explorerをtaskkillして、自分のを登録してから再度explorer立ち上げれば良いです。
※タスクバー再復活の処理してないプログラムはアイコン消えます(昔のによくある)
タグ:Program
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
// 1/100をセット
double denom = 1.0 / 100, val = 0;
// 1/100を100回足す
for( int i = 0; i < 100; i ++ ) val += denom;
// 判定
if( val == 1 ) { /* ここは絶対に処理されない */ }
volatile int g = 0; // メモリから読むことを強制 WORD WINAPI tp( LPVOID v ) { for( int i = 0; i < 10000; i ++ ) g++; return 0; } int WINAPI WinMain(HINSTANCE hi, HINSTANCE hpi, LPSTR command, int show) { const int tmax = 64; HANDLE th[ tmax ]; for( int i = 0; i < tmax; i ++ ) { DWORD tid; th[ i ] = CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)tp, 0, 0, &tid ); } // 終了待ち WaitForMultipleObjects( tmax, th, TRUE, INFINITE ); // 止めてgを確認 __asm int 3; return 0; }
mov eax, 0x2710 // 10進で10000 mov ecx, 1 loop: add [g], ecx sub eax, ecx jne loop ret
InterlockedExchange
指定された 1 個の変数の内容ともう 1 つの値の交換を一括して行います。
この関数は、複数のスレッドが同じ変数を同時に使うことを防止します。
LONG InterlockedExchange(
LPLONG Target, // 交換に使われる変数
LONG Value // 新しい値
);
戻り値:Target パラメータが指す変数の、交換前の値が返ります。
long flag = 0; WORD WINAPI tp( LPVOID v ) { for( ;; ) { if( InterlockedExchange( &flag, 1 ) == 0 ) break; Sleep( 1 ); } for( int i = 0; i < 10000; i ++ ) g++; InterlockedExchange( &flag, 0 ); return 0; }
これで意味が分かった人はエスパーだと思います。
InterlockedExchangeAdd
加数変数への増分値の原子加算を実行します。
vbpicture vp( L"c:\\a.jpg" ); int sw = vp.W, sh = vp.H; long *ps = vp.GetpData(); int dw = 600, dh = 800; vbpicture vd( w, h ); long *pd = vd.GetpData(); // 単純拡大縮小アルゴリズム for( int y = 0; y < h; y ++ ) { for( int x = 0; x < w; x ++ ) { int sx = x * sw / dw; int sy = y * sh / dh; pd[ x + y * w ] = ps[ sx + sy * vp.W ]; } } BitBlt( GetDC( 0 ), 0, 0, vd.W, vd.H, vd.hDC, 0, 0, SRCCOPY );確かニアストレイバーだとかなんとか言うような気がします。