Vaclav_ Ответов: 1

Где же настоящая проблема ?


Вот код на языке Си


{ // message block
        char *message = "SYSTEM_STATE_IDLE  ";
        OpenGL_text(message, -1, -1, 0);
        glFlush(); // needed
        int test_count = 0;
        printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
        printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
        printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
        printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);

        glFlush(); // needed ??
    } // message block



Вывод на OpenGL (экран) правильный, отслеживание printf-нет.

А вот неверный вывод, предполагающий вывод printf на стандартный ввод-вывод.

test count 0 state SYSTEM_STATE_IDLE   @function  OpenGL_SystemState @line 4961 
 test count 1 state SYSTEM_STATE_IDLE   @function  OpenGL_SystemState @line 4962 
 test count 2 state SYSTEM_STATE_IDLE   @function  OpenGL_SystemState @line 4963 

Где граф № 3 ??

Что я уже пробовал:

Я использую несколько printf, потому что, когда я использовал только один, вывода вообще не было.

1 Ответов

Рейтинг:
4

Patrice T

Цитата:
Где граф № 3 ??

Попробуй
int test_count = 0;
printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
printf("\n test count %i state %s @function  %s @line %i ", test_count++, message,__FUNCTION__,__LINE__);
printf("\n");


k5054

или fflush(stdout) если вы не хотите перемещать курсор на новую строку. Я бы также сказал, Может быть, использовать fputs(stdout, "\n"), чтобы не брать на себя накладные расходы printf, если вам это не нужно, но я видел, как компиляторы оптимизируют это по крайней мере 15 лет, так что это действительно вопрос вкуса.

Vaclav_

OpenGL имеет "функцию" glFlush , описанную как "заставить OpenGL немедленно завершить предыдущий код", мне не интересно выяснять, почему, но с текущим опытом работы с printf и предложением использовать fflush stdout похоже, что этот "flush stdout" имеет аналогичную функцию. Так что, если это просто еще одна версия cout /cerr, не имеющая синхронизации с основным процессом, я думаю "...И так оно и есть..." (W,Cronkite )

Vaclav_

Извините, ребята, но вопрос был такой: "почему не все printf выполняются?" . Я не совсем правильно выразился. Это не вопрос очистки / промывки, но вопрос в том, почему он не выполняется в первую очередь. "Я использую несколько printf, потому что, когда я использовал только один, вывода вообще не было."

Patrice T

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

Vaclav_

Так что мое признание в том, что я не опубликовал его так, как люди будут интерпретировать его как "почему printf не выполняется", - это моя вина. Извините , это не моя вина, если люди не читают обязательное "что вы пробовали", если только я не напишу "я действительно попросил Миссис Гугл..." Дайте мне перерыв. Я не прошу читать Между строк, но (для) простого анализа....