多线程应用程序在重新打开文件时遇到问题 - Windows需要很长时间才能关闭?

时间:2017-11-27 07:19:38

标签: c++ multithreading fopen fclose

我有一个多线程应用程序,可以打开一些文件(只读),并根据这些文件中的数据进行一系列计算。然后每个线程生成一些输出文件。

代码运行正常,只要我生成线程然后删除它们然后应用程序退出。但是,如果我尝试将线程创建/删除放入子例程并多次调用它,则线程在尝试重新打开输入文件时会出现问题。我在每个线程中都有一个if(inFile == NULL)检查,有时会被触发,但有时它会崩溃。无论如何,每个线程对每个文件都有一个fclose(),并且线程已正确终止,因此在重新创建线程之前应始终关闭文件。

我可以创建多个线程,可以打开相同的输入文件,并且工作正常。但是如果我关闭这些线程并重新创建新线程(例如通过重复调用子程序来创建线程),那么当线程尝试重新打开输入文件时我会收到错误。

崩溃是不可预测的。有时我可以多次遍历线程创建/删除过程,有时它会在第二次崩溃,有时是第四次崩溃等等。

我唯一能想到的是操作系统(Windows 7)有时需要很长时间才能关闭文件,因此下一个线程会在文件关闭之前生成,然后出现某种错误,因为操作系统试图在线程尝试打开文件时关闭该文件。在我看来,这可能会触发if(inFile == NULL)条件。

但是,有时当if(inFile == NULL)条件被触发时,我仍然从输入文件中读取乱码。所以它认为它有一个很好的文件指针,但显然没有。

我意识到这可能是一个难以回答的问题,但我很难过。所以也许有人有个主意。

提前致谢,

rgames

0 个答案:

没有答案