2013-04-18 126 views
0

我正在研究一個UDP客戶端服務器應用程序,其中一個服務器應該處理40個可以全部登錄的客戶端。Windows中的客戶端服務器應用程序中的CreateProcess()

現在在UNIX中,這些問題通過使用fork函數得到解決,該函數基本上創建一個子進程來處理客戶端並使服務器接受新的連接。

我在網上搜了一下,發現fork在windows下不可用,但是可以使用CreateProcess

我以前的研究也介紹了我的線程池。所以,現在我有兩個問題:

  1. 難道我用Windows CreateProcess() acheive的fork()的功能?
  2. 如果這是可能的,我應該怎麼做:線程池或創建多個進程?
+0

[This Stack Overflow thread](http://stackoverflow.com/questions/14651181/for-a-client-server-program-what-is-the-best-approach-to-receive-multiple-clien)可能對你有用。 –

回答

0

簡短的回答是否定的,有沒有像Win32 API中fork(),但它應該是可以實現它,因爲CygWin的提供Windows上的全功能叉()。但你似乎並不需要fork()爲您的應用程序。

2.其實你的選擇是:

  • 爲每個客戶端/聯接至少創建一個線程/進程
  • 所有客戶端/ Connexion公司創建只有一個線程/進程(使用事件 - 驅動方式爲實例)
  • 混用兩種以上

最好的方法取決於你的應用程序,但處理的最大的上在同時有40個客戶端的情況下,每個客戶端可以有一個線程。

您可以使用POSIX standard thread librarypthread來創建和操作線程。這個庫在所有符合POSIX標準的操作系統(GNU/Linux,Mac OS X,BSD等)中都是標準的,並已被移植到Windows。所以這種方法可以讓你擁有非常好的可移植性。

雖然如果你想使用Win32 API,你應該看看CreateThread

0

在linux中fork函數用於創建新進程。對於每個進程也有不同的虛擬內存空間。對於線程,只有一個公共虛擬內存在那裏。此外,fork API可以使用本機API RtlCloneUserProcess在Windows中進行模擬(在某種程度上)。

相關問題