Значения, возвращаемые в параметре lpTotalBytesAvail , представляют собой число байтов, которое может быть прочитано из канала, а не записано в канал.Предоставить вам информацию для выделения буфера для чтения данных из канала.
Правильный подход к обработке ошибок при записи в канал - или любой дескриптор NT Krenel - это просто выполнить вызов WriteFile() и обработайте все возвращенные ошибки.
Шаблон проверки и записи не эффективен и приведет к ошибкам, которые * никогда не встречаются в ваших тестах * Иногда случаются в поле * ... и, следовательно, очень трудно диагностировать и отлаживать * самое главное, такие ошибкибудет раздражать ваших пользователей.
Причина в том, что состояние пункта назначения может меняться между проверкой и фактической записью.Это означает, что ваш код, который вызывает WriteFile (), должен в любом случае проверять наличие ошибок.Это означает, что проверка предварительного условия перед вызовом WriteFile () - это просто дополнительный код, который не предоставляет значения.
Причина, по которой этот шаблон неэффективен, заключается в том, что Windows (и все другие операционные системы - это не просто Windows) - не могут рассматривать «проверку» и «запись» как атомарные операции.Базовая ОС полностью асинхронна, и между вызовами может произойти много.
Таким образом, ваш код будет проще и более надежным, если вы просто вызовете WriteFile () и хорошо справитесь с обработкой ошибок..
-Foredecker