1

マルチスレッドで個別の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 OSがクラッシュしました)。理由はわかりません、助けてください、ありがとう!!!

編集:メイン関数を次のコードに変更することで、質問に対処します。ありがとうございます。

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

1 に答える 1

2

アプリは2つのスレッドを生成し、スレッドが何かを実行する前に終了します。 CreateThreadを返しますHANDLE。これらのHANDLEは、に渡すことができる待機可能なオブジェクトですWaitForSingleObject

于 2012-04-24T02:31:27.463 に答える