Не удается получить стандартный вывод из проекта freeGlut

У меня есть бесплатный проект Glut с кодом, который вычисляет сетку voronoy, инициализирует freeglut, а затем рисует сетку.

pre-calculations
...
printf("Elapsed %lf seconds\n", (double)(clock() - start)/CLOCKS_PER_SEC);
glutInit            ( &argc, argv );
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
glutInitWindowSize  ( WIDTH, HEIGHT );

// create window
glutCreateWindow ( "Voronoy" );

// register handlers
glutDisplayFunc  ( display );
glutReshapeFunc  ( reshape );
glutKeyboardFunc ( key     );


glutMainLoop ();


return 0;
...

Итак, программа работает в консольном режиме, а затем создает окно фриглюта. А также у меня есть отдельная программа, которая читает из stdout pipe, подключенного к этому. Я создаю процесс с этими параметрами

STARTUPINFO        si;

ZeroMemory(&si, sizeof(si));

si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = stdinput.ReadPipe();
si.hStdOutput = stdoutput.WritePipe();
si.hStdError = stderror.WritePipe();
stdoutput.DuplicateReadPipe();

if ( !CreateProcess( "j:\\Projects\\study\\fortune\\Debug\\voronoy.exe",//"C:\\GnuWin32\\bin\\ls.exe",
    NULL,
    NULL, NULL,
    TRUE,
    (CREATE_SUSPENDED | CREATE_SEPARATE_WOW_VDM | CREATE_NO_WINDOW),
    NULL, NULL,
    &si, &process_info) )
{
    throw("!!!");
}
DWORD w = ResumeThread(process_info.hThread);
CloseHandle(process_info.hProcess);
CloseHandle(process_info.hThread);

И я также пробовал стандартный пример Pipes из MSDN.

Проблема в том, что программа не получает данные из пайпа. Я также пробовал voronoy.exe> ​​test.txt в cmd.exe, и test.txt остается пустым. Но если я запускаю его без каналов - он работает нормально, и я вижу вывод в консоли.


person ShigiDono    schedule 10.07.2012    source источник


Ответы (1)


Ответ прост. Мне нужно сбросить стандартный вывод, просто позвонив

fflush(stdout);
person ShigiDono    schedule 10.07.2012