c - 为什么在后台线程中写入我的日志文件失败
问题描述
我的 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);
}
解决方案
推荐阅读
- python - 用于遍历 mysql 表和更改表空间的 Python 脚本
- python - 如何修复“TypeError:列表索引必须是整数或切片,而不是元组”
- android - 应用程序在发布时崩溃,但在调试模式下工作正常
- python - 在 TF 中,自动命名为 Conv2DBackpropInput 的张量代表什么?
- sql-server - 如何在sql server中生成员工时间表
- android - 每当我按下按钮查看我的列表视图时,应用程序总是崩溃
- ruby-on-rails - Complex Nested SUM / Sub-Select
- php - 更新子文档 php mondodb 库
- ios - 使用 ScrollView 时出现 SwiftUI 错误
- go - 径向梯度中的条带