2009-03-09 18 views
6

Tôi đã tạo một sự kiện trong một quy trình và để kiểm tra, gửi xử lý sự kiện qua đường ống đến một quy trình hoàn toàn riêng biệt (không phải là chuỗi con)Sự kiện có thể là Inter-Process không?

Khi tôi kích hoạt sự kiện trong lần đầu tiên, WaitForSingleObject không phát hiện sự kiện vì vậy tôi đoán câu trả lời là không trừ khi tôi bỏ lỡ một số mẹo trong số SECURITY_ATTRIBUTES structure?

Hoặc có lẽ tôi cần phải sử dụng một sự kiện có tên và gọi OpenEvent()?

Trong trường hợp này tôi không thể sử dụng thông báo cửa sổ vì tôi đang cố gắng báo hiệu dịch vụ cửa sổ. Tôi có thể sử dụng đường ống, nhưng sẽ có rất nhiều các ứng dụng này, và tôi muốn tìm một giải pháp "chi phí thấp" nếu có thể.

Các tùy chọn khác như tệp ánh xạ bộ nhớ có nhiều chi phí hơn đường ống?

Bạn sẽ làm như thế nào?

Trả lời

3

Bạn cần tạo sự kiện được đặt tên và mở sự kiện đó trong cả hai quy trình. Nếu bạn có nhiều quy trình lắng nghe, bạn có thể xem xét sử dụng semaphore.

+0

Nếu các sự kiện được đặt tên được sử dụng bởi các tài khoản người dùng hoặc phiên khác nhau, có thể cần thiết để cung cấp một ACL rõ ràng khi tạo. – Richard

+0

Bạn có ví dụ về điều đó không? –

0

Có công trình này:

#COMPILE EXE "NamedEvent.exe" 

    #INCLUDE "win32api.inc" 

    %EVENT_ALL_ACCESS = &h0001F0003 

    FUNCTION PBMAIN() AS LONG 

    LOCAL lRet AS LONG, lError AS LONG, lEventName AS ASCIIZ * %MAX_PATH 
    lEventName = "TestEvent" 
    lRet = CreateEvent (BYVAL %NULL, %False, %False, lEventName) 
    lError = GetLastError() 
    IF ISFALSE lRet THEN 
     MSGBOX "Unable to create Event, error:" + STR$(lError),,"CreateEvent error" 
    ELSE 
     IF lError = %ERROR_ALREADY_EXISTS THEN 
     lRet = OpenEvent(BYVAL %EVENT_ALL_ACCESS, %False, lEventName) 
     lError = GetLastError() 
     IF lRet THEN 
      MSGBOX "Opened existing Event, handle:" + STR$(lRet),,"OpenEvent:" 
     ELSE 
      MSGBOX "Unable to open Event, error:" + STR$(lError),,"OpenEvent error" : EXIT FUNCTION 
     END IF 
     ELSE 
     MSGBOX "Created new Event, handle:" + STR$(lRet),,"CreateEvent:" 
     END IF 
    END IF  

    END FUNCTION 

Nói chung, những gì có overhead thấp:

Ống (giả sử kích thước nhỏ được xác định)

MemMapFiles

Sự kiện

+0

Overhead về bộ nhớ hoặc thời gian xử lý? –

+0

Tôi muốn hiểu tác động của cả hai tài nguyên này. –

Các vấn đề liên quan