nanosleep()永远不会在OS X Lion上"醒来"

Bra*_*bie 1 macos objective-c time.h xcode4.2 osx-lion

我在Lion中使用XCode 4.2.当我使用Debug配置文件编译我的应用程序时(按Apple + R运行它),然后当我调用nanosleep时,它永远不会从该函数返回.永远.如果我分析代码(构建发布配置文件),那么它确实返回.我只是使用XCode项目的默认配置文件设置.知道这可能会发生什么吗?

要重现这一点,请创建一个全新的空白应用程序并将以下代码放入appDelegate.m:

#import "AppDelegate.h"
#import <time.h>

@implementation AppDelegate

@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"Hello");
    struct timespec a;
    a.tv_nsec = 10000;

    /** THE FIX! **/
    a.tv_sec = 0;
    /** THE FIX! **/

    nanosleep(&a,NULL);
    NSLog(@"World");
}

@end
Run Code Online (Sandbox Code Playgroud)

预期行为:在Hello之后0.01毫秒将"World"打印到调试控制台.

实际行为:仅打印"Hello"并且不显示任何窗口.

ken*_*ytm 6

尝试明确地设置a.tv_sec为0.可能它被初始化为一些垃圾并使纳米睡眠持续很长时间.


或者,你可以使用usleep

#include <unistd.h>

...

NSLog(@"Hello");
usleep(10);      // 0.010 ms = 10 µs = 10000 ns
NSLog(@"World");
Run Code Online (Sandbox Code Playgroud)