2012-04-23 96 views
0

我正在編寫一個具有多人功能的遊戲,而且我需要編寫一個服務器控制檯。一個簡單的「從標準輸入 - >處理輸入 - >寫入輸出」循環讀取將不起作用,因爲服務器必須正在運行,並且可能在服務器管理員在服務器控制檯中輸入時打印日誌消息。我已經看到了用於UNIX/Linux系統的tecla和Editline庫,但是沒有發現任何用於Windows的東西。這類事情有哪些好的庫?在Windows上編程交互式服務器控制檯

如果你不明白,這幾乎與Interactive console programming for c/c++?相同,但是對於Windows。

回答

0

一般有兩種方法解決這個問題:

  1. 在一個線程中運行整個服務器,並與使用異步IO來確定主迴路控制線程,事件(進入的數據包,主機按鍵等)來自並處理它們。

    在unix系統中,您可以調用select()調用,還可以使用一些更高級的變體,例如poll()和epoll(),在某些後來的unix/linux版本中。在窗戶中,他們稱之爲Overlapped IO

  2. 有單獨的線程管理服務器的單獨部分。通常的做法是,每個客戶端一個線程,再加上一個控制檯線程。在這裏,不要試圖編寫一個主循環,你必須明智地使用mutexes,condition variables等來確保線程不會踩在彼此的腳趾上。

相關問題