многопоточность — запись в файл в потоке, переполнение стека

Я написал программу, которая должна написать «1» в потоке в течение трех секунд. Но когда я пытаюсь отладить или добавить выходные данные элементов управления, я понимаю, что поток часто не создается (никаких выводов в консоли или достижений точки отладки). Когда я проверяю возвращаемое значение CreateThread(), все нормально. Я читал о файле входа в систему для ввода / вывода, но я думаю, что мне это не нужно. Я хочу программу с двумя потоками; одна запись «1» в течение трех секунд, а вторая запись «2» в течение трех секунд. Затем сравните результат. Не имеет значения, смешаны ли «1» и «2» во входном файле.

#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdio.h>
#include <WinBase.h>
#include <ctime>

#define NTHREAD 2

std::ofstream myfile;

DWORD WINAPI fce1 (LPVOID a){
time_t timerStart, timerNow;
time(&timerStart);
timerNow = timerStart;
while((timerNow - timerStart) < 3)
{
myfile << "1";
myfile.flush();
time(&timerNow);
}
return 0;
}int main()
{
HANDLE threads[NTHREAD];
DWORD dwThreads[NTHREAD];

myfile.open("file.txt");
threads[0] = CreateThread(NULL, 0, fce1, NULL, 0, &dwThreads[0]);
if (threads[0] == NULL){
printf("Error\n");
}

myfile.close();
return 0;
}

1

Решение

Проблема заключается в том, что ваша основная программа закрывает файл и завершает работу до завершения потока, это означает, что поток может попытаться записать в закрытый файл а также что он будет убит в процессе.

Вы должны дождаться окончания потока, прежде чем выходить из процесса. Вы можете сделать это, например, используя GetExitCodeThread опросить, когда поток вышел.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector