31. oktober 2003 - 20:17Der er
16 kommentarer og 1 løsning
Tråde i c++ på Linux
Da jeg er ved at implementere en protokol har jeg brug for at kunne monitorere en tabel med ACKS med jævne mellemrum. Lige nu scanner jeg tabellen for udløbne ACKs hvergang jeg indsætter en nu.
Det ideelle ville være at køre en tråd som gjorde dette.
Jeg har kigget på pthreads (har også engang brugt dem på Minix), men synes ikke jeg kan finde et C++ eksempel hvor en klasse opretter en tråd og også indeholder den metode tråden skal køre.
Er der nogen der har et ultra simpelt eksempel eller et alternativ? (fork()tvivler jeg selv på)
Med fork() får jeg en ny proces som er en kopi af den gamle, det vil vel sige at jeg får 2 forskellige tabeller med ACKs at holde styr på, og skal lave en eller anden form for kommunikation imellem de 2 (vha pipes?). Er det korrekt?
Er det ikke aller nemmest at kalde pthread_create med: en god gammeldags "C style" funktion sit objekt og så lade funktionen kalde den rigtige metode på objektet ?
int main() { Object myobject; myobject.start(); return 0; } Kan ikke helt gennemskue om det var det Bertel mente. Og om det er en OK måde at stoppe trådene på?
Undskyld - den her Mozilla gemmer det man skriver her efter man har postet det -
grunden til jeg brugte sleep(1) var bare for at "simulere" at main tråden lavede noget. Jeg tror ikke join vil være det rigtige for tråden skal bare blive ved at køre og monitorere ACK tabellen. Mon ikke snarere jeg skal indsætte pthread_exit()
i bunden af func1(). Det vil vel lukke den kaldende tråd?
Lækkert jeg tror faktisk det virker nu (mangler lige at synkronisere tabellen men det er en anden snak). Tak for hjælpen begge 2! Og så må i gerne svare (eller er der noget med Bertel ikke vil have point?)
Som du har lavet det, er func1 en static funktion, dvs. den kan ikke tilgå ikke-static objekter (funktioner og variable) i sin klasse. Derfor er du nød til at bruge obj-> til at få fat i disse.
Det jeg var ude på var at få din thread funktion til at være en ikke-static funktion. Det kan du opnå ved at kalde en ikke-static funktion gennem obj-> i func1.
Jeg forsøger stadig at undgå point.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.