[英]Write to file in thread, C++
我編寫了一個程序,該程序應該在線程中寫入“ 1”三秒鍾。 但是,當我嘗試調試或添加控件輸出時,我意識到通常不會創建線程(控制台中沒有輸出或調試點的實現)。 當我檢查CreateThread()
的返回值時,就可以了。 我讀到有關I / O登錄文件的信息,但我認為我不需要它。 我想要一個帶有兩個線程的程序; 一個寫“ 1”三秒鍾,第二個寫“ 2”三秒鍾。 然后,比較結果。 輸入文件中是否混合了“ 1”和“ 2”都沒有關系。
#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdio.h>
#include <WinBase.h>
#include <ctime>
#define NTHREAD 2
std::ofstream myfile;
DWORD WINAPI fce1 (LPVOID a){
time_t timerStart, timerNow;
time(&timerStart);
timerNow = timerStart;
while((timerNow - timerStart) < 3)
{
myfile << "1";
myfile.flush();
time(&timerNow);
}
return 0;
}
int main()
{
HANDLE threads[NTHREAD];
DWORD dwThreads[NTHREAD];
myfile.open("file.txt");
threads[0] = CreateThread(NULL, 0, fce1, NULL, 0, &dwThreads[0]);
if (threads[0] == NULL){
printf("Error\n");
}
myfile.close();
return 0;
}
問題在於,您的主程序會在線程完成運行之前關閉文件並退出,這意味着線程可能會嘗試寫入已關閉的文件, 並且該文件將被進程殺死。
您必須等待線程完成才能退出進程。 例如,可以使用GetExitCodeThread
輪詢線程退出的時間來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.