- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在寻找 Mac OS X 上最简单或最合适的方法来简单地“发出信号”或通知一个进程。来自 Windows 背景,这可以使用类似以下的方法来实现。
进程A:
// create named event
hCreatedEvent = CreateEvent(NULL, TRUE, FALSE, "MyUniqueNamedEvent");
// wait for it to be signalled
WaitForSingleObject(hCreatedEvent, INFINITE);
然后在进程B中:
// open the existing named event
hOpenedEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "MyUniqueNamedEvent");
// signal it
SetEvent(hOpenedEvent);
因此,当执行进程 B 中的 SetEvent
调用时,进程 A 会从 WaitForSingleObject
中跳出并执行一些工作。
我实际上不需要发送任何数据,所以我排除了诸如命名管道 (FIFO) 或套接字之类的东西,因为它们有点矫枉过正(我看过 this similar question ,但因为它们需要发送数据,我的问题略有不同)。同样,我不知道其他进程的 PID(这就是为什么我需要某种共享对象)所以我不能使用任何需要它的东西。
到目前为止,我的入围名单是:
sem_open
、sem_wait
和 sem_post
分别创建/打开、等待和发出事件信号。使用起来相当简单。notify(3)
函数 - 使用起来相当简单,如果使用通知不是有点笨拙的话。NSDistributedNotificationCenter
或 CFNotificationCenter
函数 - 看起来是最“Mac 风格”的处理方式,而且相当简单。但是,我的代码可能需要作为 dylib 运行并根据 this unanswered question ,这可能对我不起作用。那么,有没有人有任何使用上述任何方法的建议/技巧/恐怖故事,或者我没有想到的更合适的替代方法来实现我想要的?
最佳答案
所以经过更多的挖掘,我最终决定沿着 POSIX 信号量路线走下去,这似乎对我有用,就像这样:
在进程 A 中(等待信号量):
// create semaphore, fail if already exists
sem_t *sem = sem_open("MyUniqueSemaphore", O_CREAT | O_EXCL, 0666, 0);
if (sem != SEM_FAILED)
{
// wait on semaphore
if (sem_wait(sem) == 0)
{
// semaphore signalled!
}
// close our "handle" to the semaphore and remove it from the system
sem_close(sem);
sem_unlink("MyUniqueSemaphore");
}
然后在进程 B 中(发出信号量信号):
// open the existing semaphore created in process A
sem_t *sem = sem_open("MyUniqueSemaphore", 0);
if (sem != SEM_FAILED)
{
// "signal" it
sem_post(sem);
// close our "handle" to the semaphore
sem_close(sem);
}
信号量似乎也是一种“自动重置”类型(用 Windows 的说法),因此一旦发出信号就会恢复为未发出信号。
关于c++ - Mac OS X 等价于 CreateEvent() 与用于进程间通信的命名对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886666/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!