blacksheep
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
Hi, ich brache einen Timer. Also das Program soll 10 sec nach dem man es aufruft geschlossen werden. Man soll aber die 10 sec damit arbeiten können. Ich habs mit sleep probiert aber da friert halt das ganze Programm ein ☹ , Jemand ne Idee wie ich das machen könnte??? Mfg Blacksheep
|
haraldkl
Anmeldungsdatum: 21. Juli 2005
Beiträge: 1903
Wohnort: Würselen
|
Hi, wir hatten schon einen Thread, der sich mit einer ähnlichen Thematik beschäftigt. Schau doch dort mal vorbei, vielleicht bekommst du die ein oder andere Anregung. Wenn dir da nix hilft, einfach noch mal nachfragen. 😉
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
Hi, erst einmal danke für deine Hilfe. Ich hab mir die Sache mit den Threads durch gelesen und einfach mal das Beispiel kopiert so wie es da steht. Aber ich kann es nicht kompelieren. Es kommt folgende Fehlermeldung: test.o: In function `main':
/home/blacksheep/test/src/test.cpp:18: undefined reference to `pthread_create'
/home/blacksheep/test/src/test.cpp:19: undefined reference to `pthread_create'
/home/blacksheep/test/src/test.cpp:21: undefined reference to `pthread_join'
/home/blacksheep/test/src/test.cpp:22: undefined reference to `pthread_join'
collect2: ld returned 1 exit status
make[2]: *** [test] Fehler 1
Mfg Blacksheep
|
ahessling
Anmeldungsdatum: 12. Januar 2006
Beiträge: 169
Wohnort: Voerde (am Niederrhein)
|
Lass mich raten, du hast -lpthread beim Kompilieren vergessen: gcc -D_REENTRANT beispiel1.c -lpthread
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
Okay thx konnte es jetzt kompelieren. Ma sehn ob ich das jetzt so umgeschrieben krieg das der macht was ich will 😀 Mfg Blacksheep
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
Okay ich hab jetzt einen Thread eingefügt. Aber das Programm schläft immer noch ein, wenn ich den thread aufrufe in dem sleep vorhanden ist. Mfg Blacksheep
|
haraldkl
Anmeldungsdatum: 21. Juli 2005
Beiträge: 1903
Wohnort: Würselen
|
Hi, so richtig hellsehen, kann hier wahrscheinlich keiner... Da keiner weiß was du machst, kann man auch nicht so Recht sagen, wo das Problem liegen könnte. Vielleicht könnte dir jemand helfen, wenn du ein paar relevante Code-Zeilen posten würdest. 😉
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
Okay ich poste dann hier ma nen paar Zeilen 😀 void *sleep(void * arg)
{
sleep(10);
close();
}
int main()
{
pthread_t id1;
void *res;
pthread_create(&id1,NULL,sleep,NULL);
pthread_join(id1, &res);
return 0;
} da is bestimmt nen Fehler drinn, hab das halt versucht, von einem Beispiel abzuleiten. Mfg Blacksheep
|
dEMaStEr
Anmeldungsdatum: 24. November 2005
Beiträge: 146
Wohnort: Aspach
|
blacksheep hat geschrieben: Okay ich poste dann hier ma nen paar Zeilen 😀 void *sleep(void * arg)
{
sleep(10);
close();
}
int main()
{
pthread_t id1;
void *res;
pthread_create(&id1,NULL,sleep,NULL);
pthread_join(id1, &res);
return 0;
} da is bestimmt nen Fehler drinn, hab das halt versucht, von einem Beispiel abzuleiten. Mfg Blacksheep
Was für ein Fehler wird denn gemeldet? Auch alle includes vorhanden?
|
SaschaF
Anmeldungsdatum: 9. Dezember 2005
Beiträge: 61
|
ist das, das ganze programm? ist doch ein bissl sinnlos oder? 😀 das ruft doch nur den Thread auf und fertig. Oder willst du uns den Rest verheimlichen? 😀
|
Gizmo
Anmeldungsdatum: 6. Januar 2005
Beiträge: 377
|
Hallo, ich habe zwar keine Ahnung von C++ (Habs noch nie verwendet). Aber das was du vor dem Beenden des Programms machen willst, müsste das nicht zwischen pthread_create und pthread_join stehen. Was macht close()? Du müsstest nach dem sleep(10) das programm beenden (mit exit(0)?), dies machst du in der Methode sleep. Ist sleep(10) wirklich 10 Sekunden nicht Millisekunden. Ich hoffe ich habe etwas nützliches erzählt, vielleicht irre ich mich auch... Gizmo
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
@SaschaF: joh ist sinnlos. Is ja nich das ganze Prog wollte nich unnötig das Forum zu müllen 😀 @Gizmo: Wenn ich das close zwischen pthread_create und pthread_join schreibe wird es ja direkt beendet. Ich will es aber so haben dass das program 10sec offen ist und es sich dann schließt. Oder gehe ich die Sache komplett falsch an 🤣 Das Program soll wenn es einmal fertig ist eine Lautstärkeanzeige sein. So wie sie in Gnome existiert, also ein kleines Fenster was auf dem Bildschirm erscheint die Lautstärke anzeigt und sich dann wieder schließt. Hab nämlich nach soetwas gesucht aber nichts gefunden und da dachte ich schreib ichs halt selber ☺ Mfg Blacksheep
|
Gizmo
Anmeldungsdatum: 6. Januar 2005
Beiträge: 377
|
Ich sagte auch nicht du sollst close dorthin schreiben (Ich verstehe meinen Beitrag zumindest nicht so). Ich meinte dein Code sollte dorthin kommen.
|
blacksheep
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 651
Wohnort: Düsseldorf
|
okay thx gizmo für den Tipp. Es bleibt jetzt schon mal nicht mehr haengen 😀 nur es beendet sich jetzt voll schnell, scheinen wohl doch keine sekunden zu sein. Komisch weil vorher hat der bei sleep 10 voll lange gewartet hmm.... EDIT: also ich hab noch ma nach geguckt is in sec. Hier mal der komplette Source: #include "sound.h"
#include <qprogressbar.h>
#include <pthread.h>
#include <unistd.h>
int i;
Sound::Sound(QWidget* parent, const char* name, WFlags fl)
: Sounddlg(parent,name,fl)
{
system("volume --volume>>/tmp/volume.txt");
FILE *fp;
fp = fopen("/tmp/volume.txt", "r");
fscanf( fp,"%d", &i );
fclose (fp);
progressBar1->setProgress(i);
system("rm /tmp/volume.txt");
}
Sound::~Sound()
{ }
void *time(void * arg)
{
sleep(10);
exit(0);
}
void Sound::Lauter()
{
pthread_t id1;
void *res;
pthread_create(&id1,NULL,time,NULL);
system("volume --up");
system("volume --volume>>/tmp/volume.txt");
FILE *fp;
fp = fopen("/tmp/volume.txt", "r");
fscanf( fp,"%d", &i );
fclose (fp);
progressBar1->setProgress(i);
system("rm /tmp/volume.txt");
pthread_join(id1, &res);
}
void Sound::Leiser()
{
pthread_t id1;
void *res;
pthread_create(&id1,NULL,time,NULL);
system("volume --down");
system("volume --volume>>/tmp/volume.txt");
FILE *fp;
fp = fopen("/tmp/volume.txt", "r");
fscanf( fp,"%d", &i );
fclose (fp);
progressBar1->setProgress(i);
system("rm /tmp/volume.txt");
pthread_join(id1, &res);
}
#include "sound.moc" Mfg Blacksheep
|
Apollon
Anmeldungsdatum: 27. Oktober 2004
Beiträge: 724
Wohnort: Darmstadt
|
Ein Thread und ein sleep() sind absolut fehl am Platz. Das habe ich ja auch schon im anderen Thread geschrieben. Bau eine Schleife die nur 10 sec. laeuft. Dann verlasse das Programm. Sieht in Pseudocode etwa so aus uint start = time();
while (time() - start < 10) {
// erledige ganz viele ganz wichtige hochkomplexe sachen hier
}
|