badhot 发表于 2009-8-6 09:28:48

书里的一个例子不知道怎么用

#include "ace/os.h"
#include "ace/ace.h"
#include "ace/process.h"
int main(int argc,char *argv[])
{
        ACE_Process_Options options;
        FILE *fp = 0;
        char *n_env = 0;
        int n;
        if (argc == 1)
        {
                n_env = ACE_OS::getenv("factorial");
                n = n_env == 0 ? 0 : atoi(n_env);
                options.command_line("%s %d",argv,n == 0 ? 10 : n);
                const char *working_dir = ACE_OS::getenv("working_dir");
                if (working_dir) options.working_directory(working_dir);
                fp = fopen("factorial.log","a");
                options.setenv("program=%s",ACE::basename(argv));
        }
        else{
                fp = fopen("factorial.log","a");
                if (atoi(argv)==1){
                        fprintf(fp,"[%s|%d]:base case\n",
                                ACE_OS::getenv("program"),ACE_OS::getpid());
                        fclose(fp);
                        return 1;
                }
                else{
                        n =atoi(argv);
                        options.command_line("%s %d",argv,n-1);
                }
        }
        ACE_Process child;
        child.spawn(options);
        child.wait();
        int factorial = n*child.exit_code();
        fprintf(fp,"[%s|%d]: %d! == %d\n",
                ACE_OS::getenv("program"),ACE_OS::getpid(),
                n,factorial);
        fclose(fp);
        return factorial;
};

这个程序有什么输入参数吗,我没有输入参数,会挂。

shuot 发表于 2009-8-6 10:35:26

不输入参数就要设置环境变量。否则就输入参数比如程序叫test,就输入test 1

bobos12@126.com 发表于 2010-4-7 15:53:53

我是在VS2008调试,你选属性-》配置属性-》调试,里面可以添加环境变量

freeeyes 发表于 2010-4-9 13:54:08

做一下单步调试。
发现你的如果没有参数
你的代码中有
atoi(argv)==1
这里似乎有问题。

earthdog 发表于 2010-7-13 21:38:54

int main(int argc,char *argv[])

估计是这里,ACE需要初始化一些全局变量,通常通过ACE::init()来实现,还有就是退出时,需要调用ACE::fini()来回收全局变量。如果你使用一般C++入口函数,这些工作需要自己来做,幸运的是ACE为我们提供了帮助,你可以把这句改成
int ACE_TMAIN(int argc, ACE_TCHAR * argv[])
试试。
页: [1]
查看完整版本: 书里的一个例子不知道怎么用