我有一個std::thread
功能正在調用fopen
一個大文件加載到一個數組:殺的std ::線程同時讀取大文件
std::thread loader(loadfile, fname, fbuffer, fsize);
loader.detach();
:
void loadfile(char *fname, char *fbuffer, long fsize)
{
FILE *fp = fopen(fname, "rb");
fread(fbuffer, 1, fsize, fp);
flose(fp);
}
這是通過所謂的在某個時候,我的程序中的某些內容想要停止閱讀該文件並要求另一個文件。問題是,當我刪除fbuffer
指針時,loader
線程仍在繼續,並且我得到一個導致異常的競爭條件。
我該如何殺死那個線程?我的想法是,以檢查fbuffer
是否存在等,也許分割一小塊一小塊的fread
:
void loadfile(char *fname, char *fbuffer, long fsize)
{
FILE *fp = fopen(fname, "rb");
long ch = 0;
while (ch += 256 < fsize)
{
if (fbuffer == NULL) return;
fread(fbuffer + ch, 1, 256, fp);
}
fclose(fp);
}
這是否會降低文件的閱讀?你有更好的主意嗎?
讓線程運行,畢竟你不必使用結果。 – 2015-02-07 17:24:03
你不能殺死一個分離的花紋:http://en.cppreference.com/w/cpp/thread/thread/detach – 2015-02-07 17:25:25
@UlrichEckhardt如果我在線程運行時刪除'fbuffer',程序就會崩潰。 – 2015-02-07 17:37:08