dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Konsoles non-blocking input

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Aug 02, 2007 11:04 pm    Post subject: Konsoles non-blocking input

Atceros sen atpakaļ taisīju kādai spēlei serveri uz LINUXa. Tajā paralēli servera darbībai (while loopam) varēja arī ievadīt komandas un kontrolēt servera darbību. Es lasīju taustiņu eventus ar UNIXa select, bet vai ir kāda iespēja kaut ko līdzīgu darīt arī uz Win platformas konsoles application? Man galvenais nosacījums ir, lai programma neapstādinātu loopu, kā tas ir std::cin, scanf gadījumos un lai darbotos backspace (vismaz, lai varētu jebkuru characteru aizstāt ar citu).
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Aug 02, 2007 11:11 pm    Post subject:

Mēģināju kautko uzgooglēt, laikam vienīgā iespēja būs multithreadings.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 02, 2007 11:26 pm    Post subject:

Protams, ka ir iespējams. Tikai msdnu vajag tikai lasīt, nevis gūglēt ;)
Izmantojot GetNumberOfConsoleInputEvents fju var uztaisīt pollojošu konsoles inputa apstrādi, ja tas der. Man jau poll'ings personīgi nepatīk. Es labprātāk lietoju bloķējošas eventu apstrādes (GetMessage, select, un tml).
Te vēl citas konsoles funkcijas: http://msdn2.microsoft.com/en-us/library/ms682073.aspx

Bet multithreadings ar nav slikta lieta. Pareizi implementēts tas tikai palīdzēs.

Edit: ok, palasīju pats to GetNumberOfConsoleInputs fjas aprakstu. Tur laba lieta pateikta:
Quote:
A process can specify a console input buffer handle in one of the wait functions to determine when there is unread console input. When the input buffer is not empty, the state of a console input buffer handle is signaled.


Tā ta zem Windowsa ir tāpatās kā zem nix'a. Vari mierīgi select'veidīgu funkciju izsaukt uz stdin/out/err handļiem un saņemt informāciju par to vai ir inputs vai nav, vai arī bloķēt kamēr nepienākt inputs.

T.i:
Code:
if (WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0) == WAIT_OBJECT_0)   // gaida 0 milisekundes, var gaidīt ilgāk
{
  // ir inputs
}


Kas laikam jau ir visai loģiski - stdin/out jau ir parasti faili (aplikācijas levelī).


Last edited by bubu on Thu Aug 02, 2007 11:32 pm; edited 2 times in total
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Aug 02, 2007 11:30 pm    Post subject:

Man pollings arī diezko nepatika (uz LINUXa), bieži nestrādāja, kā vajag un pie mazākām kļūdām sistēma vispār nestrādāja vai pat pakārās. Laikam būs jākož cauri multithreadings. Varbūt ir kāds labs cross-platform laibrarijs multithreadingam? Es te atradu boost, bet viņš baigi plašais izskatās.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 02, 2007 11:32 pm    Post subject:

Multithreadingam ņem pthread. Zem windows tā arī ir noportēta.
Un kā gan pollings var nestrādāt/kārties? Tam gan neticu. Gan jau nebija pareizi uzrakstīts.
A bet boost's ir dikti laba lieta. Ne tikai threadingam. C++'am kā tādam :)


Last edited by bubu on Thu Aug 02, 2007 11:34 pm; edited 1 time in total
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Aug 02, 2007 11:34 pm    Post subject:

Ideāli! Paldies!
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group