Objective c nanosleep()从不;“醒来”;关于OSX狮子
我在Lion中使用的是XCode 4.2。当我使用调试配置文件编译我的应用程序时(按Apple+R运行它),然后当我调用nanosleep时,它永远不会从该函数返回。曾经如果我分析代码(构建版本配置文件),那么它确实会返回。我只是在使用XCode项目的默认配置文件设置。知道这里可能发生了什么吗 要复制此操作,请创建一个全新的空白应用程序,并将以下代码放入appDelegate.m中: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
#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(“世界”);
也许你想发布一些代码?当然,我添加了代码和最小指令来重现这个问题。也许你想发布一些代码?当然,我添加了代码和最小指令来重现这个问题。