Tôi đang tìm cách đơn giản nhất hoặc phù hợp nhất trên Mac OS X để chỉ đơn giản là "tín hiệu" hoặc thông báo cho một quy trình từ một quy trình khác. Đến từ một nền Windows này có thể đạt được bằng cách sử dụng một cái gì đó như sau.Mac OS X tương đương với CreateEvent() với đối tượng được đặt tên cho giao tiếp giữa các quá trình?
Trong Process A:
// create named event
hCreatedEvent = CreateEvent(NULL, TRUE, FALSE, "MyUniqueNamedEvent");
// wait for it to be signalled
WaitForSingleObject(hCreatedEvent, INFINITE);
và sau đó trong quá trình B:
// open the existing named event
hOpenedEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "MyUniqueNamedEvent");
// signal it
SetEvent(hOpenedEvent);
Vì vậy, khi cuộc gọi SetEvent
trong Process B được thực thi, Quy trình A sẽ bùng phát từ WaitForSingleObject
và làm một số công việc .
Tôi không thực sự gửi bất kỳ dữ liệu nào vì vậy tôi đã loại trừ những thứ như Ống có tên (FIFO) hoặc ổ cắm, v.v ... (tôi đã xem this similar question, nhưng khi cần để gửi dữ liệu, câu hỏi của tôi hơi khác một chút). Tương tự, tôi sẽ không biết PID của quá trình khác (đó là lý do tại sao tôi cần một số loại đối tượng chia sẻ) vì vậy tôi không thể sử dụng bất cứ điều gì mà sẽ yêu cầu điều đó.
Cho đến nay trên danh sách rút gọn của tôi là:
- POSIX Semaphores - sử dụng
sem_open
,sem_wait
vàsem_post
để tạo/mở, chờ đợi trên và báo hiệu sự kiện tương ứng. Xuất hiện khá căng thẳng để sử dụng. - Các chức năng BSD
notify(3)
- xuất hiện khá đơn giản để sử dụng, nếu không phải là một chút khó khăn để tiêu thụ thông báo. - Các chức năng
NSDistributedNotificationCenter
hoặcCFNotificationCenter
- xuất hiện hầu hết cách "Mac như" để thực hiện mọi việc và khá đơn giản. Tuy nhiên, mã của tôi có thể cần chạy dưới dạng dylib và theo số this unanswered question, mã đó có thể không hoạt động đối với tôi.
Vì vậy, có ai có bất kỳ lời khuyên/mẹo/câu chuyện kinh dị nào đã sử dụng bất kỳ giải pháp thay thế nào ở trên hoặc thậm chí phù hợp hơn mà tôi chưa từng đạt được những gì tôi muốn không?