Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: WinSocket ja Thread ongelma...

kayttaja-3842 [03.11.2008 17:51:20]

#

Terve vaan kaikille...

Elikkäs minulla on sellanen ongelma, että olen tekemässä omaa IRC clienttiä ja tein oma IRCPROTOCOLA nimisen luokan joka siis sisältää kaikki yhdistämiseen ja datan hakuun tarvittavat funktiot. Noh kun teen ohjelman jossa on suoraan mainissa alustaminen, yhdistäminen sekä datan haku niin kaikki toimii hienosti

 int main(){
    bool run = true;
   string data;

    if(!IRCP.InitSocket()){
      //cout << "Can't Init Socket!" << endl;
      MessageBox(NULL, "Can't Init Socket!", "Error!", MB_OK);
      return 0;
    }else{
     if(!IRCP.OpenConnect()){
       //cout << "Can't connect to server!" << endl;
       MessageBox(NULL, "Can't connect to server!", "Error!", MB_OK);
       return 0;
     }else{

       while(run){



      data = IRCP.getData();

	if( data != "noup")
         //cout << "[" << data << "]" << endl;
         MessageBox(NULL, data.c_str(), "Yeah", MB_OK);

	 //IRCP.handleCommand(data);
	}


     }

    }

 return 0;
}

...tuo siis toimii suoraan jos sen heittää mainin, mutta kun laitankin tuon saman Threadiin omaan chat WinAPI:lla tekemääni ohjelmaan, niin alustaminen ja yhdistys onnistuu, mutta en saa käsiini datan dataa...

Eli mikä voisi olla vikana, että suoraan mainissa toimii hienosti, mutta threadiin laitettuna en saa serveriltä datan dataa???


...toivottavasti saitte edes jotain selkoo.

Metabolix [03.11.2008 17:56:43]

#

Luulenpa, ettet voi avata viestilaatikkoa eri säikeestä. Kokeilepa vaikka tallentaa data tiedostoon.

kayttaja-3842 [04.11.2008 10:24:41]

#

Noh kokeilin niin, että jos ei ole noup eli if( data != "noup") niin sammutetaan ohjelma, mutta ohjelma ei sulkeutunut missään vaiheessa. Eli tämä tarkoittaa luultavasti sitä, että dataa ei saada missään vaiheessa ja getData palauttaa "noup". Eli getData tekee nytte niin, että jos dataa ei saada palautetaan "noup" muuten palautetaan saatu data... :/

Metabolix [04.11.2008 13:33:12]

#

"Noh" kokeilepa vielä varmuuden vuoksi laittaa se sulkemiskoodi aivan säikeen alkuun, että näet, sulkeeko se varmasti ohjelman. Ei sitä monisäikeistä ohjelmaakaan ihan miten tahansa saa suljettua.

Jos lähtisit itse järjestelmällisesti tutkimaan, mitä säikeessä tapahtuu ja mitä eri funktiot palauttavat, saisit homman ratkaistua alle puolessa tunnissa. Suosittelen.

kayttaja-3842 [04.11.2008 16:01:21]

#

Juu kokeilin kyllä tuon sulkemisen muualla heti alkuunsa. Eli ohjelma sulkeutuu hienosti jos laitta esim tuon ehdon ulkopuolelle. Eli vika on nytten siinä, että jostain syystä sitä dataa ei vain keretä saada tai jotain?!?

kayttaja-3842 [04.11.2008 22:46:57]

#

Ahaa vika löydetty!!!

Eli vika olikin se, että josain syystä datan haku meni sekaisin koska yritin kirjottaa dataa luokaan luotuun bufferiin...

Eli minulla oli structi josta löyty tuo data bufferi ja loin sen structin tyyppisen muuttujan luokassa ja yritin hakee siihe dataa aina, mutta jostain syystä se sekottikin sen niin, että dataa ei saatu... Nytten kun aina luon getData funktiossa uuden char bufferin niin data saadaan oikein... :)

...jostain syystä tämä ei siis toimi threadin kautta? Joka tapuksessa se toimii nytten. kiitos joka tapuksesta neuvoista.

Vastaus

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

Tietoa sivustosta