Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c nanosleep()从不;“醒来”;关于OSX狮子_Objective C_Macos_Osx Lion_Xcode4.2_Time.h - Fatal编程技术网

Objective c nanosleep()从不;“醒来”;关于OSX狮子

Objective c nanosleep()从不;“醒来”;关于OSX狮子,objective-c,macos,osx-lion,xcode4.2,time.h,Objective C,Macos,Osx Lion,Xcode4.2,Time.h,我在Lion中使用的是XCode 4.2。当我使用调试配置文件编译我的应用程序时(按Apple+R运行它),然后当我调用nanosleep时,它永远不会从该函数返回。曾经如果我分析代码(构建版本配置文件),那么它确实会返回。我只是在使用XCode项目的默认配置文件设置。知道这里可能发生了什么吗 要复制此操作,请创建一个全新的空白应用程序,并将以下代码放入appDelegate.m中: #import "AppDelegate.h" #import <time.h> @impleme

我在Lion中使用的是XCode 4.2。当我使用调试配置文件编译我的应用程序时(按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
#导入“AppDelegate.h”
#进口
@实现AppDelegate
@合成窗口=_窗口;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知
{
NSLog(@“你好”);
结构timespec a;
a、 tv_nsec=10000;
/**修理**/
a、 tv_sec=0;
/**修理**/
奈米睡眠(&a,空);
NSLog(“世界”);
}
@结束
预期行为:在Hello之后0.01毫秒将“World”打印到调试控制台


实际行为:只打印“Hello”,不显示窗口。

堆栈上分配了结构,因此可能有垃圾/剩余数据

由于
timespec
结构也有一个
tv_sec
成员,因此还应将其设置为0:

struct timespec a;

a.tv_sec  = 0;
a.tv_nsec = 10000;

nanosleep( &a, NULL );

您的结构是在堆栈上分配的,因此您可能有垃圾/剩余数据

由于
timespec
结构也有一个
tv_sec
成员,因此还应将其设置为0:

struct timespec a;

a.tv_sec  = 0;
a.tv_nsec = 10000;

nanosleep( &a, NULL );

尝试将
a.tv_sec
显式设置为0。可能它被初始化为一些垃圾,并使nanosleep在很长的时间内处于睡眠状态


或者,你可以

#包括
...
NSLog(@“你好”);
usleep(10);//0.010毫秒=10µs=10000纳秒
NSLog(“世界”);

尝试将
a.tv\u sec
显式设置为0。可能它被初始化为一些垃圾,并使nanosleep在很长的时间内处于睡眠状态


或者,你可以

#包括
...
NSLog(@“你好”);
usleep(10);//0.010毫秒=10µs=10000纳秒
NSLog(“世界”);

也许你想发布一些代码?当然,我添加了代码和最小指令来重现这个问题。也许你想发布一些代码?当然,我添加了代码和最小指令来重现这个问题。