ubuntuusers.de

Timer unter c++

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

blacksheep Team-Icon

Avatar von 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

Avatar von 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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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

Avatar von 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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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

Avatar von 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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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

Avatar von 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

Avatar von 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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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

Avatar von 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 Team-Icon

(Themenstarter)
Avatar von blacksheep

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

Avatar von 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
}
Antworten |