Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: NCurses thread input

kayttaja-3842 [27.10.2008 18:01:16]

#

Terve vaan kaikille,

Elikkäs olen vääntämässä testinä omaa IRC clienttiä tyyliin samanlaista kuin esim. irssi. Noh clientin käyttöliittymä toimii muuten hienosti, mutta ongelma on se että miten saisin input teksti kentän suoriutumaan saman aikaisesti tulostuksen kanssa.
Eli siis input kenttä johon voidaan kirjottaa teksitä on kokoajan päällä eli voidaan koko jana kirjottaa tekstiä, mutta törmäsin ongelmaan, että jos serveriltä tuleekin dataa niin en pysty kirjottaa sitä ruudulle heti, koska joudun odottamaan ,että käyttäjä painaa enteriä, koska input on päällä.

Noh hoidan asian nytten threadeilla, eli itse pää ohjelma suorittaa kokoajan inputin ylläpidon ja threadi printtaa ruudulle sitä mukaa dataa ku sitä serveri lähettää. Noh törmäsin ongelmaan, kun tekstiä kirjotetaan input sekoaa ja alkaa kirjottamaan tekstiä minne saattuu...

Eli lähinnä lädin kysymään, sitä, että onko ncursesissa mitään mahdollisuutta ns. mutlicursoriin, että yksi kursori on koko ajan inputin käytössä ja toinen tulostelee tekstiä ruudulle...

Toivottavasti saitte selvää, koska en jaksanu sen kummemin tekstiä kieliopillisesti kirjottaa, annoin vaan tekstin virrata mitä päästä nyt irotsi. :)

Kiitos...

Metabolix [27.10.2008 18:56:57]

#

Linux man page kirjoitti:

int nodelay(WINDOW *win, bool bf);
The nodelay option causes getch to be a non-blocking call. If no input is ready, getch returns ERR. If disabled (bf is FALSE), getch waits until a key is pressed.

int halfdelay(int tenths);
The halfdelay routine is used for half-delay mode, which is similar to cbreak mode in that characters typed by the user are immediately available to the program. However, after blocking for tenths tenths of seconds, ERR is returned if nothing has been typed.

Jos käytät ensimmäistä näistä funktioista, muista laittaa ohjelmaan jonkinlainen viive, jottei se turhaan kuluta resursseja. Luultavasti varsin hyvään tulokseen pääsee myös jälkimmäisellä funktiolla ja yhden kymmenyksen viipeellä.

kayttaja-3842 [28.10.2008 13:30:05]

#

Eli tuota halfdealya käyttämällä ei mun periaatteessa tarvitse edes käyttää threadia?

Metabolix [28.10.2008 14:33:07]

#

Kummallakaan noista et tarvitse erillistä säiettä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta