Это корректно, чтобы предположить, что GetLastError (и варианты) на поток, или действительно ли это для каждого процесса? Проблемы, если это для каждого процесса, несколько очевидны в многопоточных приложениях, потому что нет никакого способа гарантировать, что никакие другие вызовы Win32 не были выполнены между Вашим неудавшимся вызовом и GetLastError. Иногда значение GetLastError важно.
Например, AcceptEx возвратит FALSE (отказ) при использовании портов завершения IO. WSAGetLastError (подобный GetLastError) возвратит ERROR_IO_PENDING, чтобы сообщить Вам, что он ожидается, и отказ не происходит из-за чего-то еще. Проблема состоит в том, что десятки вызовов ofther могут быть в полете и перезаписать это значение.
Эти вызовы распараллеливают, конкретны или обрабатывают конкретный? Если процесс, конкретный затем, как Вы обрабатываете это правильно?
документы абсолютно недвусмысленны по этому поводу:
GetLastError Function
Извлекает вызывающий поток значение кода последней ошибки. Последняя ошибка код поддерживается для каждого потока основание. Многопоточность не работает перезаписать последнюю ошибку друг друга код.
Итак, они сказали это три раза (в одном абзаце!): Должно быть достаточно, как сказал Льюис Кэрролл ;-). Таким образом, нет необходимости отвечать на гипотезы вроде «но если это был процесс, а не поток, то как насчет ...?» ;-).
Оба GetLastError
и WSAGetLastError
возвращают коды ошибок для каждого потока. Взгляните на записи MSDN:
Вы можете прочитать на MSDN (см. http://msdn.microsoft.com/en-us/library/ms679360.aspx ) четкий ответ на свой вопрос:
Извлекает вызывающий поток значение кода последней ошибки. Последняя ошибка код поддерживается для каждого потока основание. Многопоточность не работает перезаписать последнюю ошибку друг друга код.