我在尝试在多线程中打开单独的txt文件时遇到了一个问题,即每个线程打开一个txt文件并读取内容,代码如下。
#include<stdlib.h>
#include<windows.h>
#include<process.h>
DWORD WINAPI lookup1(LPVOID lpParamter){
char x[10];
int y;
FILE* fin1 = fopen("D:\\1.txt", "r");
fscanf(fin1, "%s %d", x, &y);
printf("%s %d", x, y);
fclose(fin1);
return 0;
}
DWORD WINAPI lookup2(LPVOID lpParamter){
char x[10];
int y;
FILE* fin2 = fopen("D:\\2.txt", "r");
fscanf(fin2, "%s %d", x, &y);
printf("%s %d", x, y);
fclose(fin2);
return 0;
}
int main(){
CreateThread(NULL, 0, lookup1, NULL, 0, NULL);
CreateThread(NULL, 0, lookup2, NULL, 0, NULL);
return 0;
}
我认为这是一个非常简单的程序,每个线程打开一个单独的文件并从中读取。没有涉及文件共享等复杂情况,但是我发现每个线程都没有成功打开文件,fopen之后的其余代码都跳过了,没有任何信息提示。当我调试这个程序时,它甚至卡在 fopen 或 fscanf 语句中,并且永远无法恢复(Windows 操作系统崩溃)。不知道为什么,请帮帮我,谢谢!!!
编辑:通过将主要功能更改为以下代码,问题得到解决,非常感谢!
int main(){
HANDLE hThread1 = CreateThread(NULL, 0, lookup1, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, lookup2, NULL, 0, NULL);
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
CloseHandle(hThread1);
CloseHandle(hThread2);
return 0;
}