C++ 多线程文件写入
- 文件IO操作 CreateFile WriteFile
- 多线程创建 CreateThread
- 线程控制 CRITICAL_SECTION临界区资源控制,WaitForMultipleObjects多线程等待返回
// ThreadWrite.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> HANDLE fHandle; CRITICAL_SECTION cs; DWORD WINAPI writeFile(LPVOID lParam){ int num = (int)lParam; printf("线程%d:开始干活了...\r\n",num); DWORD d; for (int i = 0; i < 1000; i++){ EnterCriticalSection(&cs); CHAR fBuff[1024]; sprintf(fBuff,"线程%d:%s\r\n",num,"Hello World!"); WriteFile(fHandle, fBuff, strlen(fBuff), &d,0); LeaveCriticalSection(&cs); } printf("线程%d:活干完了...\r\n", num); return 0; } int _tmain(int argc, _TCHAR* argv[]) { HANDLE threadTree[5]; DWORD threadId; fHandle = CreateFile(TEXT("C://11.txt"), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (fHandle == INVALID_HANDLE_VALUE){ printf("创建文件获取文件句柄失败,%d\r\n",GetLastError()); getchar(); return 0; } InitializeCriticalSection(&cs); for (int i = 0; i < 5; i++) { threadTree[i] = CreateThread(NULL, NULL, writeFile, (LPVOID)(i + 1), 0, &threadId); printf("第%d号线程创建成功!\r\n", (i + 1)); } WaitForMultipleObjects(5, threadTree, TRUE, INFINITE); DeleteCriticalSection(&cs); CloseHandle(fHandle); getchar(); return 0; }