我有免费的过剩项目,包含计算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;
...
因此程序在控制台模式下工作,然后创建freeglut窗口。 而且我还有一个单独的程序,它从连接到此的stdout管道读取。我用这个参数创建过程
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示例。
问题是程序没有从管道中恢复数据。 我也试过voronoy.exe> cmd.exe和test.txt中的test.txt保持为空。 但如果我没有管道运行它 - 它工作正常,我可以在控制台中看到输出。
答案 0 :(得分:2)
答案很简单。我需要通过简单地调用
来刷新std输出fflush(stdout);