2015-09-14 46 views
0

我有一個連接到命名管道的客戶端。很多時候,這個命名管道並不存在,因此客戶端連接失敗。客戶端應儘快連接到管道,因爲有時服務器會向連接的客戶端發送命令,有時客戶端會通知服務器它的狀態。如何無限期地等待命名管道的創建?

有沒有辦法等待無限期地命名管道創建? 基本上我想避免連續呼叫連接/睡眠需要CPU時間。理想的解決方案是避免創建線程。

有一個函數WaitNamedPipe但它實際上等待管道可用,如果它不存在,它立即返回。我相信這就是爲什麼NamedPipeClientStream.Connect沒有指定超時時立即返回。

是否有任何其他IPC適合這個目標?

回答

1

讓客戶端創建一個命名事件並等待。當服務器啓動時,它應該創建管道,然後打開指定的事件。如果事件不存在,則沒有客戶端正在等待。如果事件確實存在,則服務器發出信號並且客戶端的等待結束,並且客戶端知道管道已準備就緒。

爲避免競爭的可能性,請使用通用名爲mutex的序列化這些步驟。

+0

如果客戶端和服務器在不同的機器上?命名管道可以通過網絡使用。命名的內核對象,如事件,不能。 –

+0

@RemyLebeau對IPC的引用使我認爲管道在同一臺機器上 –

+0

並非所有的IPC都限於本地機器。最值得注意的是,管道,郵筒,插座等。 –