Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Probleme mit CPU Ressourcen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.11.2004, 13:30 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich habe ein kleines Ratespiel. Nun möchte ich, dass wenn er nach 3 Sekunden nicht die richtigte Zahl erraten hat, abbricht:

C++:
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>

void sigchld(int sig)
{
  struct rusage usage;
  if(getrusage(RUSAGE_CHILDREN, &usage) == -1)
    fprintf(stderr,"ERR usage");
  else
    printf("My childs used %d msecs of CPU power ..\n", usage.ru_utime.tv_usec);

  puts("Child died");
}

int main(void)
{
  pid_t pid;
  if((pid=fork()) < 0)
    fprintf(stderr,"fork error");
  else if(pid == 0) {
    struct rlimit lim;
    lim.rlim_max = 3;
    setrlimit(RLIMIT_CPU, &lim);
    srand(time(NULL));
    while(1) {
      if((rand()%10) == 5){
        puts("You won!!");
        exit(0);
      } else {
        puts("Wrong ... trying once more");
        sleep(1);
      }
    }
  }

  if(signal(SIGCHLD, sigchld) == SIG_ERR)
    fprintf(stderr, "error sighandler");

  if(wait(NULL) != pid)
    fprintf(stderr, "wait error");

  exit(0);
}



Aber es tut sich nichts. Selbst bei der genutzten CPU Zeit kommt immer 0. Was mach ich falsch?

Danke im Voraus,
mfg
--

Dieser Post wurde am 18.11.2004 um 13:31 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.11.2004, 13:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Der Panz schläft nur und verbraucht daher keine Rechenzeit.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.11.2004, 14:24 Uhr
~mike
Gast


Hi!
Hmm. Stimmt auch wieder Wie kann ich das dann realisieren, dass er nach 3sec abbricht? Kennst du da ne einfache Lösung?

Danke im Voraus,
mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.11.2004, 16:59 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde einfach stdin auf unbuffered setzen (am einfachsten geht das Durch die verwendung von ncurses) und dann mit Hilfe von select einen Timeout realisieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.11.2004, 17:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja es soll ihm ja gestattet sein zu raten, nur muss er eben nach 3s das richtige gefunden haben, kann man nicht auch runtime-signals "abfeuern" nach 3s? sowas wie ein timer?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.11.2004, 20:27 Uhr
~mike
Gast


@virtual. Thx für den Tipp - aber gibts auch eine lösung ohne ncurses oder buffer Manipulation? Also wenns was in POSIX gibt wäre das auch ok

@Flo: Ich wollte es eigentlich so machen, dass er selbstständig vom Parent Process aus das Child kontrolliert. D.h. der Child Process sollte in dem Sinn unendlich oft raten können. Die Kontrolle übernimmt der Parent.
Wenn der Client nach 3 Mal ein Signal sendet, müsste ich nur den parent auf "suspend" setzten und dann das Child killen. Aber das will ich eigntlich nicht.

Ich könnte im Parent ein sleep 3sec machen und dann prüfen ob SIGCHLD schon gesendet wurde - wenn nein mit kill ein quit signal schicken. Aber das ist irgendwie auch nicht sauber, wenn der Parent blcokiert wird ...

Mir gehen die Ideen aus :-)
Würde mich freuen, wenn einer noch eine Idee zu dem Thema hätte

Danke im Voraus,
mfg michael

Dieser Post wurde am 18.11.2004 um 20:29 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.11.2004, 20:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


noch nen child der nach 3s das sig schickt?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.11.2004, 12:34 Uhr
~mike
Gast


Hi Flo
Das werde ich dann mal probieren thx. Das doofe ist nur, wenn ich den Rate Prozess noch mal forke, muss ich wieder einen Kinder Prozess erstellen, der nach 3sec ein Signal schickt. Kompliziert

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: