gpt4 book ai didi

c++ - 在 C++ 程序中从 NSNotification Server 获取通知

转载 作者:行者123 更新时间:2023-11-28 07:32:38 25 4
gpt4 key购买 nike

我正在 Mac 上使用 cmake 创建一个简单的 C++ 应用程序。C++ 源代码文件中有一个 main,用于创建 C++ 类。在这个类中,我正在分配 Objective-C 对象,将其自身添加到 NSNotificationCenter 中的观察者中。我没有收到这些通知。有一个代码:

通知.h

class LaunchNotification {
public:
LaunchNotification();
virtual ~LaunchNotification();

void StartNotifications();
void StopNotifications();

private:
void *monitor;
};

通知.mm

@interface Monitor : NSObject
-(id) init;
-(void) appLaunchedNotification :(NSNotification *) notification;
-(void) appTerminatedNotification :(NSNotification *) notification;
@end

@implementation Monitor

- (id) init
{
self = [super init];
if (self)
{
count = 0;
NSNotificationCenter *notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];

[notCenter addObserver : self
selector:@selector(appLaunchedNotification:)
name:NSWorkspaceDidLaunchApplicationNotification
object:nil];

[notCenter addObserver : self
selector:@selector(appTerminatedNotification:)
name:NSWorkspaceDidTerminateApplicationNotification
object:nil];
}

return self;
}

- (void) appLaunchedNotification : (NSNotification *) notification
{
NSString *path = [[notification userInfo]objectForKey: @"NSApplicationPath"];
}

- (void) appTerminatedNotification : (NSNotification *) notification
{
NSString *path = [[notification userInfo]objectForKey: @"NSApplicationPath"];
}

- (void) dealloc
{
NSNotificationCenter *notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];

[notCenter removeObserver : self];

[super dealloc];
}
@end

LaunchNotification::LaunchNotification() : monitor(NULL)
{}

LaunchNotification::~LaunchNotification()
{
StopNotifications();
}

void LaunchNotification::StartNotifications()
{
if (NULL == monitor)
{
monitor = [[Monitor alloc] init];
}
}

void LaunchNotification::StopNotifications()
{
if (NULL != monitor)
{
[(id)monitor release];
}
}

最佳答案

您需要一个运行循环,否则 NSWorkspace 没有机制来控制您的应用程序线程以发布通知。

虽然文档说运行循环是自动创建的,但它们不会自动执行。想一想:一个线程怎么可能同时运行你的代码和run loop中的代码呢?

在监视通知中心时需要执行的任何任务都需要在运行循环事件的上下文中完成,例如在 NSTimer 事件上,或者您需要一个单独的线程来处理其他内容。

关于c++ - 在 C++ 程序中从 NSNotification Server 获取通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com