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?
- A hozzászóláshoz be kell jelentkezni
kódrészlet nélkül nem akarok jósolgatni ...
- A hozzászóláshoz be kell jelentkezni
[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
- A hozzászóláshoz be kell jelentkezni
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?).
- A hozzászóláshoz be kell jelentkezni
[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.
- A hozzászóláshoz be kell jelentkezni
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, ...
- A hozzászóláshoz be kell jelentkezni
Így kipróbáltam, és nekem lefutott hiba nélkül, úgyhogy biztos, hogy ez volt a baj.
- A hozzászóláshoz be kell jelentkezni
[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:
- A hozzászóláshoz be kell jelentkezni
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>
- A hozzászóláshoz be kell jelentkezni
[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
- A hozzászóláshoz be kell jelentkezni