LINUX.ORG.RU

Странное поведение вывода в консоль.

 ,


0

2
void Input(SDL_Window* window, 
	SDL_Renderer* renderer, 
	MyWindow* myWindow) {

	//std::cout << "input\n";

	SDL_Event event;

	while (SDL_PollEvent(&event)) {
		if (event.type == SDL_QUIT)
			myWindow->_exit = true;
		if (event.type == SDL_KEYDOWN) {
			std::cout << "\nkeydown\n";

			std::ifstream file;
			file.open("/Users/goosedb/Documents/FuckThisIDE/source/FTIDE_settings.txt");


			if (file.is_open()) {
				while (true) {
					if(file.eof())
						break;
					char c;
					file >> c;
					std::cout << c;
				}
			} else {
				std::cout << "no!\n";
			}
		}
	}
}

При двух последовательных нажатиях вывод консоли:

keydown

[*syntax*#FTISE_syntax.txt#]] //Содержимое файла

keydown

После завершения программы выводится:

[*syntax*#FTISE_syntax.txt#]]

Почему у вывода такое странное поведение? Ведь

«keydown» и «[*syntax*#FTISE_syntax.txt#]]»

должны выводиться сразу друг за другом.



Последнее исправление: GooseDB (всего исправлений: 3)

Ответ на: комментарий от Miguel

Например, запускаешь в режиме nodaemon свой убер-асинхронный веб-сервис, с логированием напрямую в телетайп, по ssh через не шибко быстрый канал связи и удивляешься тормозам в работе приложения (задержка из-за медленного чтения потока на твоей стороне, фиксится буферизацией вроде (env) $ ./microservice --daemon --log-to=service.txt && tail -f service.txt, как это работает и почему так происходит подумай на досуге)

anonymous
()
Ответ на: комментарий от Miguel

Срач в консоль в 16 потоков. Оно умирает даже на обычном std::cout, без буферизации вообще нет шансов. А с thread_local кешем – нормалёк.

Stil ★★★★★
()
Ответ на: комментарий от Stil

Гм, OK. Я бы сказал, правда, что подобный срач в консоль — это само по себе неправильно, с ресурсом должен работать один поток. Но OK.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.