2010-01-06 30 views
2

我创建了一个输出“hello world”的简单命令行工具。这是在main()函数中完成的。Cocoa中的命令行工具

在一个单独的应用程序中,我可以在hello world工具的输出中创建一个NSTask管道,并成功使用它。我需要我的命令行工具来做,但是,每秒输出一些东西(我简化了这一点)。在其他地方我用NSTimer没有问题,但在main()函数中创建一个NSTimer不会让我把'self'设置为目标(我猜是因为它不是一个对象)?

这是什么结构的正确方法?该工具每秒只需输出“hello world”,直到进程停止(由作为NSTask启动它的应用程序)?

回答

2

sleep()功能呢?

int main(...) { 
    while(1) { 
    printf("Hello world!\n"); 
    sleep(1); 
    } 
    return 0; 
} 
+0

我想过 - 这样做会是一个好方法吗?只是循环休眠命令,直到进程终止?也许我刚刚花了太多时间在脑海中,忘记了简单的解决方案。 我该如何使用main之外的另一个函数调用来替换printf语句,以及我将该函数放在哪里?直接在main()之下?不知道语法,或者在哪里看 - 这种感觉更像是C编程,而不是OO,这很好,但从大学以来我就没有做过这些事情! – 2010-01-06 21:56:44

+0

您正在使用Objective-C,因此创建一个对象,将其头文件导入到'main.m'中,并使用'[[YourObject alloc] init]'在main()中实例化它。然后,您可以像在任何可可应用中一样使用它。确保你有一个autorelease池,或者你已经调用了'objc_startCollectorThread()'如果你想要这个工具被垃圾回收。 – 2010-01-07 00:42:15

+0

精彩 - 正在运行 - 谢谢! – 2010-01-07 00:50:46

0

我的方法是创建一个类(单独或在main.m文件中)。要做到这一点,写(下#进口语句)

@interface TimerClass:NSObject的

/*类的方法,使 “+” 号*/+(无效)callFunction;

@end

然后

@implementation TimerClass

。 +(无效)timerRespond:(*的NSTimer)aTimer {

//调用你的命令行工具

}

,并在主函数,调用的NSTimer并使其有一个时间间隔为1并调用TimerClass类的timerRespond。

这应该工作正常(可能有一些错误,因为我没有检查Xcode)。告诉我它是否有效。祝你好运!