У меня довольно странная проблема, с которой я никогда раньше не сталкивался, и я понятия не имею, что ее вызывает. Я работаю в Qt 4.7, и у меня есть много вещей в моем проекте, которые печатаются в терминал. Все эти отпечатки запускаются одним нажатием кнопки. Однако, когда я нажимаю кнопку, они не все печатают. Вместо этого все операторы печати, которые заканчиваются << std::endl;
будет печатать, но первый, который заканчивается "random text...\n";
не будет, и никто из тех, кто после этого не будет, независимо от того, какой стиль они используют. Если я нажму кнопку еще раз, чтобы запустить все это снова, он будет затем выведите оставшиеся операторы, а затем тот же начальный вывод, что и в прошлый раз. Я мог бы просто сделать их все std :: endl, но есть много из них, так что я бы действительно не хотел. Я никогда не видел ничего подобного раньше, есть ли у кого-нибудь совет, как это исправить? Спасибо!
РЕДАКТИРОВАТЬ: Согласно запросу, это синтаксис (при условии, что в пользовательском интерфейсе есть кнопка вызова mybutton)
void on_mybutton_pressed()
{
std::cout << "A" << std::endl;
std::cout << "B" << std::endl;
std::cout << "C\n";
}
Выход после первого нажатия кнопки:
A
B
Выход после второго нажатия:
C
A
B
Вы можете включить единичную буферизацию для cout
в начале вашей программы, если вы действительно хотите:
std::cout << std::unitbuf;
Это очистит буфер после каждый выходная операция.
В вашей ситуации я бы посчитал это скорее взломом, чем решением. Существуют ограничения производительности, связанные со сбросом (хотя они не имеют значения, если вы не печатаете на высоких частотах).
Вывод символов буферизуется. Буфер очищается, когда он заполняется, но часто для терминала вы не хотите ждать этого; std::endl
Особенность в том, что он вызывает немедленную очистку буфера.