Почему запись в мой файл журнала не удается в фоновом потоке - PullRequest
0 голосов
/ 11 апреля 2020

Мое Windows приложение написано на C. Основной поток использует CreateThread для запуска функции в другом потоке.

Проблема заключается в том, что если основной поток вызвал приведенную ниже функцию перед вызовом CreateThread, вызовы функции из второго потока не смогут записать сообщения в файл , Если второй поток передает другое имя файла, он работает. Кажется, что-то блокирует фоновые потоки от открытия файла.

void WINAPI WriteToLogFile(LPSTR lpszLogfile, LPSTR lpszMsg)
{
   HANDLE hFile;
   DWORD dwWritten = 0;
   char szMsgText[MAX_PATH];

   time_t now = time(0);
   memset(szMsgText, 0x00, sizeof(szMsgText));
   strftime(szMsgText, 100, "%Y-%m-%d %H:%M:%S - ", localtime(&now));

   hFile = CreateFile(lpszLogfile,
               FILE_APPEND_DATA, FILE_SHARE_WRITE, NULL,
               OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

   WriteFile(hFile, szMsgText, (DWORD)strlen(szMsgText), &dwWritten, 0);
   WriteFile(hFile, lpszMsg, (DWORD)strlen(lpszMsg), &dwWritten, 0);
   WriteFile(hFile, "\r\n", 2, &dwWritten, 0);

   CloseHandle(hFile);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...