Aufruf im Minutentakt



  • @cico
    "system" is auch nicht standard 🙂 Aber das ist ned das problem ... egal obs die feine art ist oder ned, du bekommst proebleme wenn es bei sowas nutzt, egal ob das system in c++, visual basic, oder java oder was auch immer aufrufst.

    Alternativen ? ... keine wirkliche, leider.
    ok, linux kannst eine der fork varianten nehmen, das entscharft den sicherheitsaspect. Unter windows kannst das System uber den API-Call ersetzen ... performanter ... und eben auch sicherer ...
    Klar, plattformunabhaengigkeit geht da ned wirklich.

    Sich auf nen externes binary zu verlassen und das zu "pollen" ist eh die schlechteste aller alternativen.

    In dem konkreten fall ... das php abschiessen.

    Die daten vom server bekommst auch mit c/c++ , und das sauberer ...
    daten in ne sql-tabelle zu pressen, auch ... und dabei benutzt dann eben sichere schnittstellen (die von dem game server, und die sql sockets) die auch noch performanter sind, ohne jedesmal nen externen prozess dafuer aufzumachen.
    (fuer die max Loesung)

    Bei der abgespekten version (cronjob) laesst die abreit nem spezialisten halt tun ... ist allemal sicherer als den system call selber zu machen ...

    Ciao ...



  • Cico schrieb:

    @RHBaum du hast ja recht mit system ein prozess zu starten ist nicht die feine art in c/c++ aber die schnellste...

    Einfachste, aber gewiss nicht die Schnellste.

    kennst du vielleicht ne alternative?vielleicht ist fork()eine???

    fork() und danach execXXX um den Code des auszuführenden Programms in das Speicherabbild des Kindprozesses zu kopieren.



  • fork() und danach execXXX

    und damit baut er genau den "system" -Aufruf nach 🙂
    Bisserl mehr sollt er schon machen ... besonders berechtigungen korrekt setzen und S-Bit checken, den system-call string und dessen parameter validieren etc 🙂

    btw fork + execXXX ist sicher genau so schnell wie system ... weil es am ende genau das selbe tut ?

    Ciao ...



  • RHBaum schrieb:

    fork() und danach execXXX

    und damit baut er genau den "system" -Aufruf nach 🙂
    Bisserl mehr sollt er schon machen ... besonders berechtigungen korrekt setzen und S-Bit checken, den system-call string und dessen parameter validieren etc 🙂

    btw fork + execXXX ist sicher genau so schnell wie system ... weil es am ende genau das selbe tut ?

    Ciao ...

    Nein, weil system zuerst die shell aufruft.

    "The system() function (declared in <cstdlib>) launches another program from the current program. As opposed to what most users think, it doesn't return the exit code of the launched process. Instead, it returns the exit code of the shell that launches the process in question.
    When the system() call returns, the value assigned to stat is the exit code of the shell process. Thus, examining the return code of system() is pretty useless in most cases. To collect the exit code of a launched application, you have to use an Interprocess Communication mechanism such as signals, pipes etc.
    "



  • Um was fuern Game Server handelt es sich ?

    Vielleicht hat der ne bessere schnittstelle, wo die nich html parsen musst oder sowas ?

    Ciao ...



  • 🙄 🙄

    Danke für eure Hilfe aber dann muss ich das wohl doch irgend wie anders machen...hätte icht gedacht das es so schwer ist ein programm alle zehn sekunden aufzurufen...was solls...Danke



  • Nein, weil system zuerst die shell aufruft.

    Bist dir da sicher ???
    Glaub muss da noch mal nachlesen ... mir war aber irgendwie im gedaechtniss, das system nen fork() + exec nur kombiniert .... ?

    Bei mir funktionierte zum beispiel der aufruf eines .sh scripts ned, was aber haette laufen sollen, wenn er die shell zu aufmacht ... Nen systemaufruf mit /bin/bash + dem shell script funktionierte.
    Shell war gesetzt fuer den user, und es war die bash ... .sh hatte executable flag ...

    Edit:

    Ok, wenn du schon so zitierst, hasst sicher recht 🙂 Dann irre ich mich 🙂

    edit2 :
    Jupp, hasst recht ... da hab ich was verhauen ...

    Ciao ...



  • Also hast denn schon mal an die Timer Funktion gedacht?

    Das ist kein sleep(); sonder ein echter Timer nur wie der unter dev-C+++ geschrieben wird weiss ich nicht(aber es gibt dazu genug Beiträge im Netz).

    Und es gibt doch bestimmt Befehl in Linux mit den man die Systemzeit auslesen kann? Das wär doch auch ne gute Möglichkeit.



  • TheRaven schrieb:

    CronJobs sprechen nicht dagegen , aber ich möchte das alle 10 sekunden eine php datei aufgerufen wird und das ist mit cronjobs nicht machbar.

    Ursprünglich war zwar von "jede Minute" die Rede, aber gut...

    Um nochgenauer zu sein : das php script liefert daten von einem game server wie punkte etc. diese werten ausgewertet und in eine sql db geschrieben jeder gamer kann sich dann später auf der homepage angucken wie gut er ist etc.

    Und das muss wirklich alle 10 Sekunden aktualisiert werden? 🙄
    Wenn ja dann schreib Dir einfach einen kleinen Daemon der Dein Update-Script alle 10 Sekunden via exec* startet.

    edit: Und programmieren würde ich das der Einfachheit halber unter GNU/ Linux wenn das auch Dein Zielsystem ist. Schlimmstenfalls holst Du Dir halt ein Knoppix zum Entwickeln. ➡



  • Habe schon mit den 100% Cpu Auslastung gemerkt

    War nur ein Witz ( sinnlose Demo für clock() ). Sorry, wollte dich nicht ärgern. 😉

    http://www.cron-server.de/ , sleep() / Sleep() oder MT.

    ... und jetzt setze ich als Gag noch einen oben drauf (timer-Klasse ist allerdings brauchbar für Zeitmessungen): 😉

    // aufbauend auf http://finmath.uchicago.edu/~wilder/Code/timer/
    //
    // timer.h
    #ifndef TIMER_H
    #define TIMER_H
    
    #include <ctime>
    
    class timer
    {
      private:
          bool    running;
          double  accumulated_time;
          clock_t start_time;
    
          timer(const timer& t);
          void operator=(const timer& t);
    
      public:
           timer() : running(false), accumulated_time(0) { }
           ~timer() { }
    
           void   start          (const char* timer_name = 0);
           void   restart        (const char* timer_name = 0);
           void   stop           (const char* timer_name = 0);
           double check          (const char* timer_name = 0);
           double elapsed_time   ();
    };
    
    #endif // TIMER_H
    
    //-------------------------------------------
    
    // timer.cpp
    #include <ctime>
    #include <iostream>
    #include <iomanip>
    #include "timer.h"
    using namespace std;
    
    double timer::elapsed_time()
    {
      clock_t curr_time = clock();
      return double(curr_time - start_time) / CLOCKS_PER_SEC;
    }
    
    void timer::start(const char* timer_name)
    {
      if (running) return;
      cout.setf(ios::fixed, ios::floatfield);
      if (timer_name) cout << "Timing [" << timer_name << "]...\n";
      running = true;
      start_time = clock();
    }
    
    void timer::restart(const char* timer_name)
    {
      if (timer_name) cout << "Restarting [" << timer_name << "]...\n";
      accumulated_time = 0;
      running = true;
      start_time = clock();
    }
    
    double timer::check(const char* timer_name)
    {
      if (timer_name) cout << "Checking timer [" << timer_name << "]...\n";
      if (running) return accumulated_time + elapsed_time();
      return accumulated_time;
    }
    
    void timer::stop(const char* timer_name)
    {
      if (running) accumulated_time += elapsed_time();
      running = false;
      setprecision(4);
      if (timer_name) cout << "Ending [" << timer_name << "] : "
                           << accumulated_time << endl;
    }
    
    //------------------------------------------------------------------------------------------
    // main.cpp
    
    #include <iostream>
    #include <conio.h>
    #include "timer.h"
    using namespace std;
    
    void wait_ms( unsigned t )
    {
      double zeit;
      clock_t start = clock();
      do{ zeit = 1000 * ( clock() - start ) /
    static_cast<float>(CLOCKS_PER_SEC);
      }while( zeit < t );
    }
    
    int main()
    {
      timer x;
      const int wait_time = 2000;
    
      cout << "Timer started\n";
      x.start();
      wait_ms(wait_time);
      cout << x.check("Check 1") << endl;
    
      cout << "Timer restarted\n";
      x.restart();
      wait_ms(wait_time);
      cout << x.check("Check 2") << endl;
    
      cout << "Timer stopped\n";
      x.stop();
      wait_ms(wait_time);
      cout << x.check("Check 3") << endl;
    
      cout << "Timer started, not restarted\n";
      x.start();
      wait_ms(wait_time);
      cout << x.check("Check 4") << endl;
    
      getch();
    }
    


  • TheRaven schrieb:

    🙄 🙄

    Danke für eure Hilfe aber dann muss ich das wohl doch irgend wie anders machen...hätte icht gedacht das es so schwer ist ein programm alle zehn sekunden aufzurufen...was solls...Danke

    Du kannst sowas auch mit verschachteten schleifen leicht selber proggen nur mußt du es geschickt machen wegen der cpu auslastung die du für die operationen brauchst um die verzögerung zu proggen.mein tip achte darauf falls du ne funktion proggst das sie itterativ ist und nicht rekursiv...schau dir am besten dazu ein paar beispiele zu schleifen bzw.allgorithmen an...ich persönlich würde mir nicht die arbeit machen würde stattdessen Sleep() benutzen aber das mußt du allein wissen für was du das proggi brauchst du hast ja an der kritik gehört das Sleep() die 2 wahl ist...



  • Cico schrieb:

    TheRaven schrieb:

    🙄 🙄

    Danke für eure Hilfe aber dann muss ich das wohl doch irgend wie anders machen...hätte icht gedacht das es so schwer ist ein programm alle zehn sekunden aufzurufen...was solls...Danke

    Du kannst sowas auch mit verschachteten schleifen leicht selber proggen nur mußt du es geschickt machen wegen der cpu auslastung die du für die operationen brauchst um die verzögerung zu proggen.mein tip achte darauf falls du ne funktion proggst das sie itterativ ist und nicht rekursiv...schau dir am besten dazu ein paar beispiele zu schleifen bzw.allgorithmen an...ich persönlich würde mir nicht die arbeit machen würde stattdessen Sleep() benutzen aber das mußt du allein wissen für was du das proggi brauchst du hast ja an der kritik gehört das Sleep() die 2 wahl ist...

    Schwachsinn!Wie willst du dir ne sleep funktion mit verschachtelten schleifen basteln? Haste da mal sourcecode???
    Und was hat das Problem hier mit iterativen und rekursiven Algorithmen zu tun???



  • Der Raven aus Sachsen o_O ?



  • this->that schrieb:

    Cico schrieb:

    TheRaven schrieb:

    🙄 🙄

    Danke für eure Hilfe aber dann muss ich das wohl doch irgend wie anders machen...hätte icht gedacht das es so schwer ist ein programm alle zehn sekunden aufzurufen...was solls...Danke

    Du kannst sowas auch mit verschachteten schleifen leicht selber proggen nur mußt du es geschickt machen wegen der cpu auslastung die du für die operationen brauchst um die verzögerung zu proggen.mein tip achte darauf falls du ne funktion proggst das sie itterativ ist und nicht rekursiv...schau dir am besten dazu ein paar beispiele zu schleifen bzw.allgorithmen an...ich persönlich würde mir nicht die arbeit machen würde stattdessen Sleep() benutzen aber das mußt du allein wissen für was du das proggi brauchst du hast ja an der kritik gehört das Sleep() die 2 wahl ist...

    Schwachsinn!Wie willst du dir ne sleep funktion mit verschachtelten schleifen basteln? Haste da mal sourcecode???
    Und was hat das Problem hier mit iterativen und rekursiven Algorithmen zu tun???

    Es geht hier um ne zeitverzögerung von x sec.hast du wohl hoffendlich mitbekommen...es geht nicht darum eine sleep funktion mit ner schleife zu proggen...und eine zeitverzögerung sprich,zeitschleife kann man simulieren mit einem allgorithmus der z.b eine rechenoperation sooft durchführt und eine gewisse zeit brauch z.b 1.sec und jetzt stellst du dir eine schleife vor die die operation 10 mal in einer verschachtelten schleife wiederholt...das beispiel ist hoffendlich primitiv genug um das zu verstehen... 😃

    Achja und wenn du nicht mal den unterschied bzw.vor u.nachteile zwischen itterativ u. rekursiv kennst in bezug auf funktionen,dann mach dich erst mal schlau...
    ich wollt jetzt niemand ans bein pinkeln aber sowas langweilt halt....gääähn...



  • Cico schrieb:

    Es geht hier um ne zeitverzögerung von x sec.hast du wohl hoffendlich mitbekommen...es geht nicht darum eine sleep funktion mit ner schleife zu proggen...und eine zeitverzögerung sprich,zeitschleife kann man simulieren mit einem allgorithmus der z.b eine rechenoperation sooft durchführt und eine gewisse zeit brauch z.b 1.sec und jetzt stellst du dir eine schleife vor die die operation 10 mal in einer verschachtelten schleife wiederholt...das beispiel ist hoffendlich primitiv genug um das zu verstehen... 😃

    Selten so einen Schwachsinn gelesen. Das kann aufgrund des Prozesswechsels und der unterschiedlichen Prozessorgeschwindigkeiten nicht funktionieren. Kannst uns ja gerne mal Code zeigen.

    Achja und wenn du nicht mal den unterschied bzw.vor u.nachteile zwischen itterativ u. rekursiv kennst in bezug auf funktionen,dann mach dich erst mal schlau...
    ich wollt jetzt niemand ans bein pinkeln aber sowas langweilt halt....gääähn...

    Ich weiß was die Begriffe bedeuten (wohl besser als du). Fakt ist, daß das hier absolut nichts zur Lösung des Problems bringt.



  • this->that schrieb:

    Cico schrieb:

    Es geht hier um ne zeitverzögerung von x sec.hast du wohl hoffendlich mitbekommen...es geht nicht darum eine sleep funktion mit ner schleife zu proggen...und eine zeitverzögerung sprich,zeitschleife kann man simulieren mit einem allgorithmus der z.b eine rechenoperation sooft durchführt und eine gewisse zeit brauch z.b 1.sec und jetzt stellst du dir eine schleife vor die die operation 10 mal in einer verschachtelten schleife wiederholt...das beispiel ist hoffendlich primitiv genug um das zu verstehen... 😃

    Selten so einen Schwachsinn gelesen. Das kann aufgrund des Prozesswechsels und der unterschiedlichen Prozessorgeschwindigkeiten nicht funktionieren. Kannst uns ja gerne mal Code zeigen.

    Achja und wenn du nicht mal den unterschied bzw.vor u.nachteile zwischen itterativ u. rekursiv kennst in bezug auf funktionen,dann mach dich erst mal schlau...
    ich wollt jetzt niemand ans bein pinkeln aber sowas langweilt halt....gääähn...

    Ich weiß was die Begriffe bedeuten (wohl besser als du). Fakt ist, daß das hier absolut nichts zur Lösung des Problems bringt.

    Das mit der Prozessorgeschw. stimmt.die kann auf verschiedenen cpu's unterschiedlich sein doch hat er ja nicht erwähnt das das proggi auf unterschiedlichen rechnern laufen muss...ansonsten kommt er nicht an einer timerabfrage vorbei....um diese urzeit schaltet sich mein hirn auf ruhephase...gäähn...



  • Cico schrieb:

    this->that schrieb:

    Cico schrieb:

    Es geht hier um ne zeitverzögerung von x sec.hast du wohl hoffendlich mitbekommen...es geht nicht darum eine sleep funktion mit ner schleife zu proggen...und eine zeitverzögerung sprich,zeitschleife kann man simulieren mit einem allgorithmus der z.b eine rechenoperation sooft durchführt und eine gewisse zeit brauch z.b 1.sec und jetzt stellst du dir eine schleife vor die die operation 10 mal in einer verschachtelten schleife wiederholt...das beispiel ist hoffendlich primitiv genug um das zu verstehen... 😃

    Selten so einen Schwachsinn gelesen. Das kann aufgrund des Prozesswechsels und der unterschiedlichen Prozessorgeschwindigkeiten nicht funktionieren. Kannst uns ja gerne mal Code zeigen.

    Achja und wenn du nicht mal den unterschied bzw.vor u.nachteile zwischen itterativ u. rekursiv kennst in bezug auf funktionen,dann mach dich erst mal schlau...
    ich wollt jetzt niemand ans bein pinkeln aber sowas langweilt halt....gääähn...

    Ich weiß was die Begriffe bedeuten (wohl besser als du). Fakt ist, daß das hier absolut nichts zur Lösung des Problems bringt.

    Das mit der Prozessorgeschw. stimmt.die kann auf verschiedenen cpu's unterschiedlich sein doch hat er ja nicht erwähnt das das proggi auf unterschiedlichen rechnern laufen muss...ansonsten kommt er nicht an einer timerabfrage vorbei....um diese urzeit schaltet sich mein hirn auf ruhephase...gäähn...

    Natürlich stimmt es. Diese Schleifen würden nie funktionieren - selbst nicht auf einem Prozessor. Und wenn er dann irgendwann mal ein andres System benutzt wäre alles fürn Arsch. Dass er nen Timer braucht stand nie in Frage - nur gibt es da bereits Dutzende! Geh besser schlafen 🕶



  • warum nimmt er denn nicht einfach Sleep() und fertig?!??!



  • Du musst zugeben, dafür Multithreading zu benutzen klingt einfach professioneller 💡



  • Genau, z.B.: boost::thread


Anmelden zum Antworten