我有免费的大量项目与代码,计算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; ...
所以程序在控制台模式下工作,然后创buildfreeglut窗口。 而且我有单独的程序,从标准输出pipe道连接到这个读取。 我用这个参数创build进程
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);
我也尝试了MSDN的标准Pipes示例。
问题是程序没有从pipe道中收集数据。 我也尝试了cmd.exe中的voronoy.exe> test.txt和test.txt保持空白。 但是,如果我没有pipe道运行它 – 它工作正常,我可以在控制台中看到输出。
答案很简单。 我需要通过简单的调用来刷新std输出
fflush(stdout);