C多线程编程(windows)中的文件输入和输出

时间:2012-04-24 02:17:10

标签: c++ multithreading file

当我尝试在多线程中打开单独的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;
} 

1 个答案:

答案 0 :(得分:2)

该应用程序生成两个线程,然后在线程有机会执行任何操作之前退出。 CreateThread会返回HANDLE。那些HANDLEs是可以传递给WaitForSingleObject的等待对象。