Thread Problem
-
kommentiere ich die zeile pthreade_create aus klappt es bei mir auch einwandfrei...
wie kann das kommen das ich nen fehler bekomme??
-
Hum. Ich schieß mal ein bisschen ins Blaue. Ich nehme mal an, dass du
#include <pthread.h> #include <stdio.h>
am Anfang des Programms und ne schließende Klammer am Ende hast, sonst würde das nämlich gar nicht erst kompilieren. Der Code sieht soweit OK aus, also...welchen Compiler benutzt du, in welcher Version und wie rufst du den Compiler auf? Bei mir mit gcc 3.3.5 und dem Aufruf "gcc -pthread t.c" liefs.
-
ja die habe ich beide drin... und ich nutze kdevelop...
habe auch die lib lpthread eingebunden, hoffe jedenfalls das sie mit eingebunden wird...
kdevelop nutz ich in der neuste version die bei suse 9.2 dabei ist...
-
Kompilierst du auch mit der Option:
-pthread
-
habe ihm kdevelop unter c++ die einstellung lpthread eingetragen
-
bekomme nur ne fehlermeldung wenn der configure neu schreibt...
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for C++ compiler default output file name...
configure: error: C++ compiler cannot create executables
See `config.log' for more details.
*** Beendet mit Status: 77 ***aber weiß nich ob es damit etwas auf sich hat, habe bei compileraufruf CXX lpthread eingetragen... mit -lpthread das gleiche und mit nur pthread auch der fehler...
-
Wo hast du das denn eingetragen? Die richtige Option ist -pthread
-
unter projekte->projekt einstellungen->einstellungen für configure und dann c++ hab ich jetzt -pthread eingetragen und der fehler ist immernoch da.
-
snoopdog schrieb:
unter projekte->projekt einstellungen->einstellungen für configure und dann c++ hab ich jetzt -pthread eingetragen und der fehler ist immernoch da.
Das gehört dort nicht hin. Du mußt beim Automake-Manager für dein Target diese Option hinzufügen, oder beim QMakeManager, wenn du den benutzt.
-
und wo finde ich das feld wo ich es eintragen muss??
[edit]
habs gefunden unten rechts nen menü aufklappen..
dann hab ich auf mein projekt geklickt rechte maustaste einstellungen und dann auf biblotheken...dort habe ich dann -lpthread eingetragen. dann autoconf & konsorten ausgeführt und programm wieder gestartet... gleicher fehler...
mit -pthread kommt nen fehler beim autoconf...
-
snoopdog schrieb:
und wo finde ich das feld wo ich es eintragen muss??
Im Automake Manager auf das Target gehen, hat oft hinten ein (Programm in bin). dann auf Einstellungen und bei den Linkerschaltern -pthread eintragen.
-
habe ich probiert... der speicherzugriffsfehler besteht immernoch...
-
snoopdog schrieb:
habe ich probiert... der speicherzugriffsfehler besteht immernoch...
Hmm, kannst du mal dein Programm einfach mal selbst kompilieren und schauen was dann passiert? Dann solltest du mal dein Programm durch Valgrind laufen lassen und mal schauen, wo es genau abstürzt.
-
kannst du mir sagen wie ich mit gcc mehrere cpp und header dateien compiliere ? oder muss ich mir erst ne makedatei erstellen ?? hab bisher immer mit kdevelop gearbeitet
-
Du kannst das natürlich auch über einzelne gcc-Aufrufe machen, dass ist aber natürlich aufwendig.
Eine Makefile musst du nicht unbedingt schreiben, dafür gibt es die ultimative Makefile, die du nur noch ein wenig anpassen musst.
-
habe grade etwas ausprobiert.. ein neues Projekt erstellt was nur nen hallo ausgibt... die biblotheken bei kdevelop eingebunden und es klappt einwandfrei...
das gleiche bei meinem projekt getan und es klappt nichts, hier mal die komplette Fehlermeldung.
/bin/sh: line 1: 22915 Speicherzugriffsfehler ./gameservermanager
Betätigen Sie die Eingabetaste, um fortzufahren!
-
z.B.
g++ -I/include -L/libs -lpthread /src/foo.cpp /usr/include/bar.cpp -o TestProgrammMichael
-
so also ich habe es grade irgendwie hinbekommen das ich keinen Speicherzugriffsfehler mehr habe. weiß aber nicht genau wieso... aber es klappt, das komische ist nur da nix ausgeben wird...
void *WarteAufAnfrage(void *name) { //int i; sleep(10000); printf("%s",name); } int main(int argc, char *argv[]) { pthread_t WarteThread; //pthread_attr_t attr; //pthread_attr_init(&attr); //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); pthread_create(&WarteThread,NULL,WarteAufAnfrage,(void *)"hallo"); pthread_join(WarteThread,NULL)
so er müsste ja jetzt 10 sekunden warten bis er was ausgibt...
habe die zeit mal genutzt und mir alle prozesse angezeigt mit ps aux..
da wa einmal ./gameserver und nochmal ./gameserver ; echo"Bestätigen mit Taste..."also so als wenn der Thread sich sofort beendet...
-
weiß keiner rat oder wurd der letzte post von mir übersehen??
wäre nett wenn ihr mir nochmal dabei helfen könntet.
-
poste nochmal den gesamten Code, so dass man ihn selbst kompilieren könnte und den verwendeten kompileraufruf.