问题是这样的:
使用Win32 API中的CreateProcess()。在这种情况下,您需要指定一个从CreateProcess()调用的单独程序。正是这个单独的程序将作为输出Fibonacci序列的子进程运行。执行必要的错误检查以确保在命令行上传递非负数。
我做了以下事情。它不显示任何错误消息。当我尝试执行它时,它会自动退出:
#include <sys/types.h>
#include <windows.h>
#define _WIN32_WINNT 0x0501
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
int a=0, b=1, n=a+b,i,ii;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
if(! CreateProcess("C:\\WINDOWS\\system32\\cmd.exe",NULL,NULL,NULL,FALSE,0,
NULL,NULL,&si,&pi))
printf("\nSorry! CreateProcess() failed.\n\n");
else{
printf("Enter the number of a Fibonacci Sequence:\n");
scanf("%d", &ii);
if (ii < 0)
printf("Please enter a non-negative integer!\n");
else
{
{
printf("Child is producing the Fibonacci Sequence...\n");
printf("%d %d",a,b);
for (i=0;i<ii;i++)
{
n=a+b;
printf("%d ", n);
a=b;
b=n;
}
printf("Child ends\n");
}
{
printf("Parent is waiting for child to complete...\n");
printf("Parent ends\n");
}
}
}
WaitForSingleObject(pi.hProcess, 5000);
printf("\n");
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
我做错了什么?
答案 0 :(得分:2)
我认为你误解了你的运动。此外,您可能希望在使用CreateProcess时执行句柄继承。这可能高于您的技能水平,但仍然是一个有用的教训: http://support.microsoft.com/kb/q190351/
答案 1 :(得分:0)
为什么要调用cmd.exe
作为您的流程?问题表明,正在启动的过程应该是打印Fibonacci序列。你不应该在主进程/应用程序中这样做。
你应该拥有的是一个单独的程序,它接受一个参数并打印斐波那契序列中的许多项目。主程序应该向用户索要一个号码,然后通过传递这个号码作为参数来启动另一个程序。
答案 2 :(得分:0)
问题是产生一个输出Fibonacci序列的过程。获取/验证主进程中的用户输入,然后生成另一个程序(单独编写)以打印Fibonacci序列。将用户输入作为命令行参数传递给生成的进程。