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

标签 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 操作系统崩溃)。不知道为什么,求大神指点,谢谢!!!

编辑:将main函数改成下面的代码,问题解决了,非常感谢!

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;
} 

最佳答案

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

关于c++ - C多线程编程中的文件输入和输出(windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290926/

相关文章:

java - 使用 URL 引用桌面

c++ - 为什么要将 mutex 作为参数传递给线程调用的函数?

Java非最终静态Map在静态 block 中的操作

c - 如何使用 pthread 并发操作数据?

powershell - 使用powershell重命名文件(可变文件名结构)

javascript - 什么时候我们应该使用 file.write(...) 而不是 file.createWriteStream(...) ?

c++ - Cocoa 会限制 C/C++ openGL 应用程序的整体性能吗?

c++ - pimpl 类中的私有(private)成员?

c++ - 在父类中调用父方法并访问私有(private)变量?

c# - .NET Framework 中的并发 HashSet<T>?