[問題] Win32環境下的行程通訊

看板Perl作者 (TONICOM)時間15年前 (2009/11/08 21:31), 編輯推噓2(2022)
留言24則, 3人參與, 最新討論串1/1
請教一下各位前輩 : 小弟最近在IPC上遇到了一些難題 , 或者說是在Win32環境下的IPC . 程式的需求是如此 : PROC_A 會呼叫 PROC_B , 之後PROC_A會在那裏等待PROC_B的訊息. 我目前是將雙方要溝通的訊息以檔案的方式解決 , 但是這似乎不是很理想 . 另外PROC_A在等待時 , 我是利用無窮迴圈不斷的去偵查檔案是否被改變 , 但這也似乎不理想. 雖然已經可以成功執行 , 但是我希望能利用一些技巧來加快效率 , 所以我自行分析一下需求 : 1. PROC_A 只需要等待 PROC_B send 的 Signal , 再去抓取資料 2. 雙方的資料希望是在一個share memory 當然我不會放過CPAN , Perl提供的IPC種類很多 , 但是很可惜 , 大多不support Win32. 唯一找到的Win32::MMF , 卻老是無法編譯成功 .我也嘗試過%SIG和kill搭配 , 但是效果和Unix似乎不一樣. 想請教各位先進 , 關於win32底下的IPC , 有甚麼建議嗎 ? 如果能推薦幾個模組給小弟參考, 更是感激不盡!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.102.246

11/09 06:50, , 1F
我最近在看POE,號稱有現成的模組,不過學習曲線…
11/09 06:50, 1F

11/09 06:52, , 2F
為了scalability一開始我都先用socket,本機再開檔案
11/09 06:52, 2F

11/09 06:53, , 3F
以前用c的話是用namedpipe+waitforsingleobject
11/09 06:53, 3F

11/09 14:02, , 4F
Share Memory 解決了,利用 Memory Mapped File Service.
11/09 14:02, 4F

11/09 14:03, , 5F
剩下如何利用訊號來trigger行程
11/09 14:03, 5F

11/09 17:24, , 6F
AnyEvent is your friend
11/09 17:24, 6F

11/10 13:30, , 7F
感謝分享,我大蓋看了一下,確實符合需求,而且比我想像中還
11/10 13:30, 7F

11/10 13:31, , 8F
多!!要來好好研究一下了
11/10 13:31, 8F

11/10 15:48, , 9F
"You should avoid POE like the plague"..我笑了^_^
11/10 15:48, 9F

11/10 16:01, , 10F
不過我看了一下AnyEvent::Socket,感覺比POE簡單多了
11/10 16:01, 10F

11/10 16:03, , 11F
有DELPHI的INDY的味道…不愧是clkao...Orz
11/10 16:03, 11F

11/11 11:33, , 12F
關於Win32下的Signal , 我找到了一些資訊 :
11/11 11:33, 12F

11/11 11:33, , 13F
On Windows, Perl basically does not support signals at
11/11 11:33, 13F

11/11 11:33, , 14F
all, because Windows has no signals.
11/11 11:33, 14F

11/11 11:34, , 15F
原因 : Signals are unsupported by the Win32 API. The C
11/11 11:34, 15F

11/11 11:35, , 16F
Runtime provides crude support for signals, but there
11/11 11:35, 16F

11/11 11:36, , 17F
are serious caveats, such as inability to die() or
11/11 11:36, 17F

11/11 11:36, , 18F
exit() from a signal handler. Perl itself does not
11/11 11:36, 18F

11/11 11:37, , 19F
guarantee that signal handlers will not interrupt
11/11 11:37, 19F

11/11 11:37, , 20F
critical operations such as memory allocation, which
11/11 11:37, 20F

11/11 11:38, , 21F
means signal invocation may throw perl internals into
11/11 11:38, 21F

11/11 11:39, , 22F
disarray. For these reasons, signals are unsupported
11/11 11:39, 22F

11/11 11:39, , 23F
at this time.
11/11 11:39, 23F

11/11 11:41, , 24F
原因是擷取自ActivePerl網站
11/11 11:41, 24F
文章代碼(AID): #1AziWV1Y (Perl)
文章代碼(AID): #1AziWV1Y (Perl)