Thread hiba!

Fórumok

Thread hiba!

Hozzászólások

Sziasztok.
Szóval röviden és tömören:
Készítettem egy programot c++ -ban g++ -al fordítom le.
A probléma a következő:
Az első thread készítése hiba nélkül korrektül lefut.
Amikor a második thread meghívódik, a processz elszáll szegmens hibával, de a thread lefut.
Mi lehet a probléma?

kódrészlet nélkül nem akarok jósolgatni ...

[quote:e59b508ee1="popacsek"]kódrészlet nélkül nem akarok jósolgatni ...

Szia.
Alább látható a butított kód (még így is hibát dob :cry: )
Az oprendszer Debian

A fordítóscript:

g++ -o /home/csserver/Sc /home/csserver/Sc.cpp -ansi -L/usr/lib -lz -lcrypt -lnsl -lm -lpthread

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netdb.h>
#include <mysql/mysql.h>
#include <sys/ptrace.h>
#include <signal.h>

void *StartCSSThread( void *params ){
printf( "Started thread\n" );
sleep(10);
return NULL;
}

int main( int argc, char *argv[], char *envp[] )
{
pthread_t *threadPointer1;
pthread_t *threadPointer2;
printf("Start Thread1\n");
pthread_create( threadPointer1, NULL , StartCSSThread, NULL );
printf("Start Thread2\n");
pthread_create( threadPointer2, NULL , StartCSSThread, NULL );
printf("10 second sleeping\n");
sleep( 10 );
return 0;

}

A futtatás eredmánye:
Start Thread1
Started thread
Start Thread2
Szegmens hiba
tesztdebian:/home/csserver# Started thread

Pár éve csináltam ilyesmit (mostanában java-val foglalkozok), úgyhogy nem biztos, de talán meg kellene várnia a thread-eket a processznek (join?).

[quote:3e162da94d="popacsek"]Pár éve csináltam ilyesmit (mostanában java-val foglalkozok), úgyhogy nem biztos, de talán meg kellene várnia a thread-eket a processznek (join?).

Szia.
Az ötlet nem rossz, csak a feladat az lenne, hogy több thread -t kell majd futtatni.
Kipróbáltam úgy is, hogy a 2. thread egy másik függvében fusson, és akkor is hibát dobott.
Szóval mintha csak 1 thread -t lehetne csak futtatni :(
Szóval kicsit kezd ködössé válni a Debian thread kezelése :(
És ami még rosszabb láthatóan mindkettő thread lefut, csak a process száll el a második meghívásakor.

Nem, mégsem. Asszem rosszul adod át a thread azonosító változóját a ptherad_create hívásban.
Vmi ilyesmi kellene sztem:

pthread_t thread_id1;

pthread_create(&thread_id1, ...

Így kipróbáltam, és nekem lefutott hiba nélkül, úgyhogy biztos, hogy ez volt a baj.

[quote:dad5504368="popacsek"]Nem, mégsem. Asszem rosszul adod át a thread azonosító változóját a ptherad_create hívásban.
Vmi ilyesmi kellene sztem:

pthread_t thread_id1;

pthread_create(&thread_id1, ...

Igen igen igen, köszönöm :D
Ez volt a para, pedig a sample kicsit másképp hozta és furcsának is találtam, de gondoltam jó az úgy :(
Köszönöm szépen :D
Király vagy :lol:

na akkor el is mondom miert:
[code:1:700b873262]pthread_t *threadPointer1;
pthread_t *threadPointer2; [/code:1:700b873262]
ezek egy pointerek, amik valahova mutatnak, jo lenne az hasznalat elott inicializalni (fudejoszo :D). mivel ezt te elhagytad, a pthread_create belefirkanott valahova a nagyvilagba, es ettol lett a segfault.
Popacsek meg csak siman egy statikus valtozot hasznal, a pthread_create-nak meg a ramutato pointert adja at (& jel).

<off>
miert kell a cs-nek 2 thread? hltv?
</off>

[quote:4ef45e5fb9="Elbandi"]na akkor el is mondom miert:
[code:1:4ef45e5fb9]pthread_t *threadPointer1;
pthread_t *threadPointer2; [/code:1:4ef45e5fb9]
ezek egy pointerek, amik valahova mutatnak, jo lenne az hasznalat elott inicializalni (fudejoszo :D). mivel ezt te elhagytad, a pthread_create belefirkanott valahova a nagyvilagba, es ettol lett a segfault.
Popacsek meg csak siman egy statikus valtozot hasznal, a pthread_create-nak meg a ramutato pointert adja at (& jel).

<off>
miert kell a cs-nek 2 thread? hltv?
</off>

Szia.
Nem hltv.
Hanem most csinálunk (már van) egy webes kezelő felületet jópár szerverrel CS:S.
Ezek részben bérelt szerverek + war szerver + public szerverek.
De az igény, hogy admin webről bárhonnan bármikor tudja indítani leállítani frissíteni.
Szóval kell 1 daemon ami kezeli a thread -eket amik egy egy csserver processzt indítanak, ha az kifagy újraindítják stb...
Én is azt az érvelést gondoltam amit mondtál, de a sample az sample :D
Szóval azt hittem, hogy amolyan MS szintaktika szerint átadjuk a pointert odaát lefoglalja a területet és bemódosítja a pointert.
Na mindegy láma voltam, de köszönöm a segítségeteket, így már megoldódott a para :D