如何在另一个线程上接收NSWorkspace和可访问性通知

好奇乔治

我正在尝试进行窗口管理,但是我需要在单独的线程上运行代码。

我需要做的第一件事就是订阅这样的应用程序通知:

NSNotificationCenter *nc = [[NSWorkspace sharedWorkspace] notificationCenter];
NSString *not = NSWorkspaceDidLaunchApplicationNotification;
[nc addObserver:self selector:@selector(appLaunched:) name:not object:nil];

但是,如果我只是调用addObserver另一个线程,通知会改为在那里传递吗?

苹果有此参考,但似乎过于复杂:https :
//developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Notifications/Articles/Threading.html

如果第一个问题的答案是否定的,那么为什么我不能只转发这样的消息?

NSThread *other;

- (void)appLaunched:(NSNotification*)not {
    if([NSThread currentThread] != otherThread)
        [self performSelector:@selector(appLaunched:) onThread:other withObject:not waitUntilDone:NO];
    else
        // do respond to notification
}

我需要做的第二件事是将AXObserver添加到另一个线程的运行循环中。

如果CFRunLoopGetCurrent()从另一个线程调用,是否会像调用一样自动创建运行循环,[NSRunLoop currentRunLoop]还是必须创建一个?

肯·托马斯(Ken Thomases)

使用进行注册的观察者-addObserver:selector:name:object:会在其发布的线程(而不是注册的线程)上收到通知还有-addObserverForName:object:queue:usingBlock:,它会导致在指定的队列中接收通知,但这不能让您使其到达指定的后台线程。(仅主队列与线程绑定。)

您可以按照建议的方式将通知分流到另一个线程。但是,原始接收线程必须处于空闲状态才能首先接收通知。或者,它必须处于空闲状态以便允许NSWorkspace检测导致其发布通知的条件。

所有线程都会在请求时立即为其创建一个运行循环。基本上观察不到没有运行循环的线程是不可能的,因此您最好像在创建线程时创建运行循环一样行事。

综上所述,您的最初目标-“我正在尝试执行窗口管理,但是我需要在单独的线程上运行代码”-很有问题。许多GUI操作在后台线程中是不合法的。另外,为什么您“需要”从后台线程执行此操作?而且,如果您的主线程不是免费的,那么您将不会首先收到工作区通知。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从另一个线程android访问对象

来自分类Dev

如何冻结一个线程并从另一个线程通知它?

来自分类Dev

如何在Android中从一个活动向另一个活动发送和接收ArrayList?

来自分类Dev

通知线程停止-在另一个线程和类中引发事件-C#

来自分类Dev

从另一个类通知java线程

来自分类Dev

另一个对象内部的Javascript对象/函数可访问性

来自分类Dev

非易失性字段+来自另一个线程的第一个对象访问(java)

来自分类Dev

当一个项目在另一个线程中启动时,如何从另一个项目访问一个项目

来自分类Dev

从Android中的另一个线程进行改造和领域访问

来自分类Dev

从另一个线程访问UI控件

来自分类Dev

尝试从另一个线程访问静态 ConcurrentDictionary

来自分类Dev

另一个线程的代码如何在主线程上运行?

来自分类Dev

同步对象可锁定一个线程并释放另一个线程

来自分类Dev

同步对象可锁定一个线程并释放另一个线程

来自分类Dev

如何在另一个div内访问一个div

来自分类Dev

如何在Nuxt中从另一个状态访问一个Vuex状态?

来自分类Dev

如何在另一个JavaScript中访问一个JavaScript中的变量?

来自分类Dev

如何在jsf中从另一个访问一个ManagedBean

来自分类Dev

如何在Android的另一个模块中访问一个模块的视图?

来自分类Dev

两个 NIC,一个子网——Linux 似乎主要在一个 NIC 上传输,主要在另一个 NIC 上接收。如何?

来自分类Dev

如何从Java中的另一个运行线程访问方法

来自分类Dev

Java-如何从另一个线程访问静态同步方法?

来自分类Dev

如何在一个线程中修改变量并在另一个线程中检查变量?

来自分类Dev

如何在主线程中调用一个方法并终止另一个线程?

来自分类Dev

从另一个线程访问一个线程上的变量-Android

来自分类Dev

当另一个线程通知线程执行时,该线程在哪里开始执行?

来自分类Dev

如何在Codeigniter中将接收数组值发送到另一个模型

来自分类Dev

如何在另一个视图后面接收触摸事件?

来自分类Dev

如何在Codeigniter中将接收数组值发送到另一个模型

Related 相关文章

  1. 1

    如何从另一个线程android访问对象

  2. 2

    如何冻结一个线程并从另一个线程通知它?

  3. 3

    如何在Android中从一个活动向另一个活动发送和接收ArrayList?

  4. 4

    通知线程停止-在另一个线程和类中引发事件-C#

  5. 5

    从另一个类通知java线程

  6. 6

    另一个对象内部的Javascript对象/函数可访问性

  7. 7

    非易失性字段+来自另一个线程的第一个对象访问(java)

  8. 8

    当一个项目在另一个线程中启动时,如何从另一个项目访问一个项目

  9. 9

    从Android中的另一个线程进行改造和领域访问

  10. 10

    从另一个线程访问UI控件

  11. 11

    尝试从另一个线程访问静态 ConcurrentDictionary

  12. 12

    另一个线程的代码如何在主线程上运行?

  13. 13

    同步对象可锁定一个线程并释放另一个线程

  14. 14

    同步对象可锁定一个线程并释放另一个线程

  15. 15

    如何在另一个div内访问一个div

  16. 16

    如何在Nuxt中从另一个状态访问一个Vuex状态?

  17. 17

    如何在另一个JavaScript中访问一个JavaScript中的变量?

  18. 18

    如何在jsf中从另一个访问一个ManagedBean

  19. 19

    如何在Android的另一个模块中访问一个模块的视图?

  20. 20

    两个 NIC,一个子网——Linux 似乎主要在一个 NIC 上传输,主要在另一个 NIC 上接收。如何?

  21. 21

    如何从Java中的另一个运行线程访问方法

  22. 22

    Java-如何从另一个线程访问静态同步方法?

  23. 23

    如何在一个线程中修改变量并在另一个线程中检查变量?

  24. 24

    如何在主线程中调用一个方法并终止另一个线程?

  25. 25

    从另一个线程访问一个线程上的变量-Android

  26. 26

    当另一个线程通知线程执行时,该线程在哪里开始执行?

  27. 27

    如何在Codeigniter中将接收数组值发送到另一个模型

  28. 28

    如何在另一个视图后面接收触摸事件?

  29. 29

    如何在Codeigniter中将接收数组值发送到另一个模型

热门标签

归档