1
當我試圖在多線程中打開單獨的txt文件時,我遇到了一個問題,即每個線程打開一個txt文件並讀取內容,代碼是如下。文件在C多線程程序中的輸入輸出(windows)
#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;
}
對不起,但我是多線程編程的新手,你能不能更清楚一點?謝謝! – Bloodmoon 2012-04-24 02:47:13
main,'return 0;'的最後一行退出程序_before_兩個後臺線程已完成。你需要等待你的兩個線程先完成。因此,嘗試將'CreateThread'返回的'HANDLE'保存到一個變量中,然後將它傳遞給'WaitForSingleObject'。在返回之前爲_each_線程執行此操作。如果您仍然遇到問題,可以編輯您的問題以顯示新代碼。 – Useless 2012-04-24 10:44:08
..或者只是'sleep(無限)';'或'真(true)睡眠(1萬)';' – 2012-04-24 11:13:20