Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c++/SFML säie ongelma

Daih [11.07.2010 21:48:43]

#

olen nyt luomassa palvelinta, joka kuuntelee clientien viestejä omassa säikeissään ja suorittaa omia toimintojaan pääsäikeessä. Kirjastona käytän SFML:ää ja törmäsin ongelmaan säieluokkaa tehdessäni, eli luulen tehneeni kaiken oikein, mutta siltikään se ei vain toimi. Tällä hetkellä koodini näyttää pelkistettynä seuraavalta:

main.cpp

#include <iostream>
#include <string>

#include "include/Yhteys.h"
int main()
{
    Yhteys yhteys();
    yhteys.Kaynnista();
    return 0;
}

Yhteysluokka:

#ifndef YHTEYS_H
#define YHTEYS_H

#include <SFML/System.hpp>
#include <SFML/Network.hpp>
#include <iostream>
#include <string>

/**
 * Säieluokka, joka hoitaa palvelimen yhteydet clientien välillä.
 */
class Yhteys : private sf::Thread
{
    public:
        // Käynnistää säikeen
        void Kaynnista();
    protected:
    private:
        // Säikeen toiminnot tämän sisälle
        virtual void Run();
};

#endif // YHTEYS_H
#include "../include/Yhteys.h"

void Yhteys::Kaynnista()
{
    Launch();
}

void Yhteys::Run()
{
    ;
}

aaämdee [11.07.2010 22:08:19]

#

Minä en ainakaan tuosta sinun koodistasi vikaa huomannut. Mikä siinä on ongelmana. Mitä sinulla on tuossa Run metodin sisällä (siis säikeen koodina), ehkä vika piilee siinä.

Metabolix [11.07.2010 22:11:08]

#

Koodissasi on ylimääräiset sulut yhteys-olion määrittelyssä; nyt rivillä itse asiassa esitellään funktio. Tämä lienee kuitenkin alkuperäisessä versiossa oikein, eihän se muuten edes kääntyisi.

Ongelma on varmaankin siinä, että main-funktio loppuu saman tien, jolloin säieolio tuhotaan ja säikeen suoritus loppuu väkipakolla. Sinun täytyy lisätä main-funktioon rivi yhteys.Wait(), joka odottaa säikeen suorituksen loppuun asti.

Daih [12.07.2010 15:08:53]

#

Kiitoksia Metabolix sain ongelman ratkaistua ja nyt säikeeni toimii aivan oikein.

Vastaus

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

Tietoa sivustosta