Odpowiedz

16

Od http://blogs.msdn.com/oldnewthing/archive/2004/03/02/82639.aspx:

Po czwarte, trzeba być szczególnie ostrożnym z wartości INVALID_HANDLE_VALUE: Przez przypadek, wartość INVALID_HANDLE_VALUE dzieje się liczbowo równa pseudohandle zwróconej przez GetCurrentProcess(). Wiele funkcji jądra akceptuje pseudohandle, więc jeśli zepsujesz i przypadkowo zadzwonisz, powiedzmy, WaitForSingleObject na nieudany uchwyt INVALID_HANDLE_VALUE, to w końcu będziesz czekał na swój własny proces. To oczekiwanie oczywiście nigdy się nie zakończy, ponieważ proces zostaje zasygnalizowany po wyjściu, więc skończyło się czekaniem na siebie.

+1

Chyba czuję się chory ... Muszę więc zachować stary uchwyt i sygnalizować ważność oddzielną flagą. Dlaczego dokumentacja nie mówi tak ... – EricSchaefer

+3

Chciałbym owinąć 'WaitForSingleObject' i zwrócić' WAIT_FAILED' dla 'INVALID_HANDLE_VALUE', to prawdopodobnie zajmie mniej kodu. –