2010-12-05 2 views
1

Как я могу создать только один поток на кнопке без двойного щелчка?Запуск нитки на кнопке

+0

Это называется «debouncing». См. http://blogs.msdn.com/b/oldnewthing/archive/2004/10/15/242761.aspx – MSalters 2010-12-06 10:46:08

ответ

0

Следующий код должен делать это (под win32) ...

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

Это, конечно, предполагает, что вы инициализацию РУЧКИ ghThread к INVALID_HANDLE_VALUE заранее.

+0

Это зависит. Может ли более чем один поток обращаться к этой функции? – 2010-12-05 19:16:30

0

Вы говорите о программировании окон? Я не слишком хорошо знаком с этим, но вы должны поймать сообщение WM_LBUTTONDOWN (или дважды щелкнуть) и установить для некоторого флага bool значение TRUE. И все, что вам нужно, это не создавать поток, если этот флаг имеет значение ИСТИНА. Он должен быть инициализирован как ЛОЖЬ из курса.

+0

В чем смысл флага? Кроме того, `WM_LBUTTONDOWN` не имеет указателя двойного щелчка. Это даже не один клик, только первая половина. Вам нужны отдельные сообщения вверх/вниз для drag-n-drop, а не для кликов. – MSalters 2010-12-06 10:44:23

Смежные вопросы