我有一個C程序,其中通過TCP套接字我發送命令到對等進程。 收到此命令後,對等進程將開始執行請求的命令。但是,它需要很長時間,我不希望tcp套接字等待很長時間才能返回值。我認爲,fork一個進程會幫助我做到這一點。但是,我想要其他一些方法來使這件事情成真。請分享您的想法和經驗。請幫忙。在此先感謝,從函數返回值而不退出函數C
回答
UNIX中有多種形式的進程間通信(IPC)策略。我最喜歡的一項是產生一個子進程,並在其消亡時收到通知。關於IPC的入門知識可以在here找到,並且可以找到一個異步等待孩子進程死亡的例子here。如果您不想生成一個單獨的流程,則可以使用named pipes在兩個流程之間來回傳遞信息。
我不想生成一個過程。有什麼其他的方式可以實現我們的目標。 – Sougrakpam
命名管道也可以使用...系統V消息隊列...是的有一百萬種方法來剝皮這隻貓。 – ojblass
您可以使用一個線程並等待它,直到答覆出現。 pthread和wait會做得很好(雖然線程是輕量級的進程)。
如果你真的想永遠產卵的過程要做到這一點,你就必須採用類似的回調收到的TCP應答的情況下,這可能是從TCP包裝庫,但包括這樣的事情還是使一些如果你沒有等待很多回復,這是沒有意義的。對於少數回覆等待線程很好。
我沒有清楚你的意思。你說在你知道結果之前你想給出答案,或者可能是,返回值不取決於過程本身。就交易通信而言,存在兩種方法,即「同步」和「異步」交易。前者等待服務器完成de過程並給出結果,第二個將發送請求並獲取一個令牌,關閉該套接字,之後它將使用該令牌請求結果。所以,你可以做的是給被請求的同伴一個令牌,在該過程完成後它可以要求回答。請注意,您可能會給出一個答案,指出「過程仍在運行,稍後再試」。在您的服務器代碼中,您需要對此方案進行編程,爲每個過程分配一個數字,並將結果與該數字保持一致,並在請求時使用該數字發送結果。如果這不合適,請詳細解釋您要完成的工作。
- 1. 從函數返回函數而不調用返回函數
- 2. C函數不返回值
- 3. C函數不返回值?
- 4. Javascript函數不返回/退出
- 5. 退出函數並再次調用本身而不返回undefined
- 6. 函數返回,而不是用C
- 7. C++函數返回「INF」,而不是雙
- 8. 返回函數而不是值
- 9. 函數返回NULL值,而不是
- 10. 發出函數返回值
- 11. C++函數的返回值
- 12. 返回值函數C
- 13. typedef函數返回值C
- 14. C#winforms函數返回值
- 15. 退出\返回主函數 - Matlab
- 16. php返回函數退出點
- 17. 印刷值從函數(C++)返回
- 18. 從C函數返回多個值
- 19. 從函數返回多個值C
- 20. C++函數返回值,從陣列
- 21. c#從函數返回值的錯誤
- 22. 退出函數如果不能在30秒內返回值java
- 23. 如何在不返回值的情況下退出函數
- 24. 轉儲對象 - 獲取函數返回值而不是'函數'?
- 25. innerHTML顯示函數,而不是函數的返回值
- 26. 從函數返回值
- 27. 從PostgreSQL函數返回值
- 28. 從Ajax函數返回值
- 29. 從函數返回值
- 30. 返回值從PHP函數
您希望在等待返回值時做什麼? – Joni
一旦命令發送成功並從對等進程接收到確認,我想關閉此連接但不想等待對等進程執行該命令並返回一個值。 – Sougrakpam
不能先關閉連接,然後運行長命令? – Kninnug