首页 > 解决方案 > 为什么在后台线程中写入我的日志文件失败

问题描述

我的 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);
}

标签: cmultithreadingvisual-studio

解决方案


推荐阅读