小编Tee*_*ppa的帖子

如何从llvm/clang(相当于gcc -MD)打印依赖项?

我们的构建系统在编译时使用gcc生成源文件对*.d文件的头依赖性:

gcc -MD -MF foo.d -c foo.o foo.cc 
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何使用llvm clang生成类似的输出.

llvm clang

19
推荐指数
1
解决办法
1万
查看次数

Mac/iPhone:有没有办法在不使用Objective-C的情况下获取线程标识符?

有没有办法获得当前正在运行的线程的任何类型的线程标识符,而无需求助于Objective-C的NSThread.

我正在改进我们的自定义调试跟踪系统,以正确处理多个线程.对于每行跟踪输出,我想打印一个线程ID或一个线程名称.线程以各种方式实例化,例如使用NSOperationQueue和pthread函数.

我目前有以下两种选择,但我对其中任何一种都不满意.还有其他选择吗?

pthread_t选项

pthread_t似乎是特定平台的typedef _opaque_pthread_h.现在可以使用字段_opaque_pthread_h,即使它是hack-y而且不可移植.它有一个__siglong类型的字段,但是对于我的进程的所有线程,它似乎具有相同的值.

NSThread选项

[NSThread name]需要NSAutoreleasePool在适当的位置,但我不希望这是一个要求,因为我们的大多数代码都是纯C++,所以在没有自动释放池包装的情况下启动c ++函数会很好.

iphone macos pthreads

13
推荐指数
1
解决办法
1万
查看次数

自定义事件循环和UIKit控件.Apple的事件循环有多么神奇?

有没有人知道或有很好的链接解释iPhone的事件循环在幕后做什么?

我们在基于OpenGL的iPhone游戏框架中使用自定义事件循环.它调用我们的游戏渲染系统,使用CFRunLoopRunInMode调用presentRenderbuffer和泵事件.有关详细信息,请参阅以下代码

当我们不使用UIKit控件(作为证明,尝试Facetap,我们的第一个发布的游戏)时,它运行良好.

但是,使用UIKit的控件时,一切都差不多的作品,但并不完全.具体来说,滚动UIKit控件无法正常工作.

例如,让我们考虑以下场景.

  • 我们在自己的视图上显示UIImagePickerController.
  • UIImagePickerController涵盖了我们的自定义视图
  • 我们也暂停了自己的渲染,但继续使用自定义事件循环.

如上所述,一切都有效,滚动除外.

  • 挑选照片有效.
  • 深入研究相册的工作原理和过渡动画顺畅的.
  • 尝试滚动相册视图时,视图会跟随您的手指.

问题:滚动时,抬起手指后立即停止滚动.通常情况下,它会根据您的移动速度顺利进行,但不会在我们使用自定义事件循环时继续.似乎iPhone的事件循环正在做一些与我们自己没有实现的UIKit滚动相关的魔术.

现在,我们可以通过使用Apple的事件循环并通过NSTimer回调调用我们自己的渲染,让UIKit控件与我们自己的系统一起工作得很好.但是,我仍然想了解,在我们的自定义事件循环中未实现的iPhone事件循环中可能发生的事情.

- (void)customEventLoop { OBJC_METHOD;
  float excess = 0.0f;
  while(isRunning) {
    animationInterval = 1.0f / openGLapp->ticks_per_second();

    // Calculate the target time to be used in this run of loop
    float wait = max(0.0, animationInterval - excess); 
    Systemtime target = Systemtime::now().after_seconds(wait);

    Scope("event loop");

    NSAutoreleasePool* pool = [[ NSAutoreleasePool alloc] init];

    // Call our own render system and present render buffer 
    [self drawView]; …
Run Code Online (Sandbox Code Playgroud)

iphone animation event-handling event-loop uikit

9
推荐指数
1
解决办法
1786
查看次数

C++多重继承和Objective-C.这是GCC中的错误吗?

我昨天遇到了以下奇怪的行为.这对我来说似乎是一个编译器错误,还是有一些我错过的东西?我使用Objective-C到C++适配器类将Facebook Connect for iPhone的Objective-C类包装起来,这样就可以更方便地使用我们自己的OpenGL/C++代码.

以下代码显示了该问题.在下面的第一个变体中,编译器编译但是弄乱了vtable,因此调用了错误的方法.在第二个变体中,我们得到一个编译器错误,表明gcc很混乱.

评论试图更详细地解释这种情况.

#include <iostream>
#import <Foundation/Foundation.h>

// An abstract C++ interface
class Foo_cpp {
public:
    virtual void foo() = 0;
};

// Another abstract C++ interface
class Bar_cpp {
public:
    virtual void bar() = 0;
};


// An Objective-C to C++ adaptor. 
// It takes a C++ interface Foo. When it's do_foo method is called it
// delegates call to Foo::foo.
@interface Foo_objc : NSObject {
    Foo_cpp* foo_cpp_;
}
@end

@implementation Foo_objc

- (id)init:(Foo_cpp*)foo {
    self …
Run Code Online (Sandbox Code Playgroud)

c++ iphone macos objective-c++

3
推荐指数
1
解决办法
2324
查看次数