2010-12-05 13 views
1

誤ってダブルクリックすることなく、プッシュボタンでスレッドを1つだけ作成する方法を教えてください。プッシュボタンでスレッドを開始する

+0

これは「デバウンス」と呼ばれます。例えば、 http://blogs.msdn.com/b/oldnewthing/archive/2004/10/15/242761.aspx – MSalters

答えて

0

次のコードは、(Win32で)それを行う必要があります...

EnterCriticalSection(&critSec); 
if (ghThread != INVALID_HANDLE_VALUE) 
{ 
    ghThread = ::CreateThread(NULL, stackSize, (LPTHREAD_START_ROUTINE)ThreadEntry, NULL, 0, NULL); 
} 
LeaveCriticalSection(&critSec); 

これはもちろんありませんが、あなたが事前にINVALID_HANDLE_VALUEにghThreadハンドルを初期化すると仮定します。

+0

それは依存します。複数のスレッドがこの関数にアクセスできますか? –

+0

@マーティン:あなたは正しいマーティンです...ブロック全体にクリティカルセクションを張って問題を解決します... – Goz

+1

@Goz:必要はないはずです、それはwin32です。プッシュボタンはスレッドアフィニティを持ちます。つまり、すべてのクリックが同じスレッドに到着することを意味します。このコードはリエントラントではないので( 'ThreadEntry'はプッシュボタンメッセージを取得できません)、プッシュボタンメッセージが順番に処理されることを意味します。 – MSalters

0

あなたはWindowsプログラミングについて話していますか? 私はこれに慣れていませんが、WM_LBUTTONDOWNメッセージ(またはダブルクリック)をキャッチし、boolフラグをTRUEに設定する必要があります。そして、このフラグがTRUEの場合はスレッドを作成しないでください。 cソースとしてFALSEとして初期化する必要があります。

+0

旗のポイントは何ですか?また、 'WM_LBUTTONDOWN'にはダブルクリックの指示がありません。これは1回のクリックではなく、最初の半分だけです。クリックではなく、ドラッグアンドドロップのための別々のアップ/ダウンメッセージが必要です。 – MSalters

関連する問題