Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • In älteren Basic-Versionen gab es einmal die Befehle SETTIMER, CLEARTIMER und ON TIMER .... Befehl. Habe ich da etwas übersehen, oder wäre eine spezielle TIMERPROC, ähnlich der ERRORPROC, nur eben von TimerEvents ausgelöst, eine vernünftige Idee?
    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • SetTimer und KillTimer kennt Profan auch. Nur die Auswertung erfolgt anders. Bei WaitInput wird %wmTimer <> 0, wenn der Timer auslöst und durch Abfrage seines Inhalts wieder auf 0 gesetzt. Entsprechend kannst Du denn dann auch auswerten.


    Gruß Volkmar

  • Ja, aber bei TimerEvent-gesteuerten Systemen braucht man kein WaitInput auf Timerablauf, sondern kann inzwischen das normale Hauptprogramm abarbeiten. Sobald aber der Timer abläuft, würde die TimerProc abgearbeitet ( und springt wie bei ErrorProc nach Abarbeitung wieder ins Hauptprogramm zurück - sozusagen ein Interrupt bzw. Interrupt-Request).
    Gruss


    P.S.: Bei ErrorProc geht das ja genau so. Vielleicht wäre ja soger ein EventProc - EndProc möglich, mit programmierbarem Event...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Schon war. Aber üblicherweise frage ich ja alle Ereignisse zentral in einer Schleife ab. Und an genau dieser Stelle kommt dann auch die Abfrage auf %wmTimer rein. Der Windowszeitgeber arbeitet dementsprechend, der sendet nur eine Timerbotschaft mit der Ereignis-ID an das Fenster. Und WaitInput tut einfach nichts, bis eine Botschaft eingeht. So sind eigentlich Windowsprogramme typischerweise aufgebaut. Wenn man so will, nur eine andere Schreibweise für OnEreignis. Das WaitInput habe ich ja nur ein einziges Mal im ganzen Programm, außer ich will was ganz besonderes erreichen, wie zum Beispiel einen Dialog erst abarbeiten, bevor das Hauptprogramm weiter läuft.

    Code
    While 1
      WaitInput
      If MenuItem(X)
      ElseIf Clicked(Y)
      ElseIf Clicked(Z)
      ElseIf %wmTimer
      EndIf
    EndWhile


    In dieser Schleife frage ich alle Ereignisse des Programms ab und rufe dann die jeweilige Prozedur. Die kommt dann von ganz alleine in die Schleife zurück. Könnte Roland sicher auch anders lösen, indem er für ein Timereieignis eine Standardbehandlung fest einbaut. Aber das Timerereignis kommt vom System als Botschaft und kann nur dort behandelt werden, wo das Fenster den Inhalt seiner Botschaftswarteschlange abarbeitet.


    Gruß Volkmar

  • Ja, über API gehts auch ohne WaitInput. Dem System kann direkt eine Prozeduradresse übergeben werden, die bei einem Timerereignis aufgerufen werden soll. Beschreibung gibts hier. DieTimerProc muß dann so aussehen und der Timer muß durch die API-Funktion KillTimer gelöscht werden. Habe ich aber in Profan noch nie gemacht.


    Gruß Volkmar

  • Wenn Ihr die richtige API-Funktion aufruft


    Man soll sich sehr genau überlegen, wie man die Timer APIs einsetzt. Kommt es zum Aufruf der TimerProc in der Zeit, in der XProfan irgendwelchen anderen Code abarbeitet als Waitinput, kann das zu Programmfehlern führen, weil intern von XProfan genutzte Variablen überschrieben werden. XProfan ist nicht dazu in der Lage, an mehreren Stellen gleichzeitig zu arbeiten.

  • Ja, aber bei TimerEvent-gesteuerten Systemen braucht man kein WaitInput auf Timerablauf, sondern kann inzwischen das normale Hauptprogramm abarbeiten.


    Genau das ist alleine mit XProfan extrem gefährlich und kann nicht sicher funktionieren.
    Willst du das sicher, einfach und API basierend tun, wirst du eine andere Sprache verwenden müssen. Das geht mit XProfan nicht.


    Im Prinzip willst du das:


    Das geht aber so nicht sicher.

  • Funktioniert! Danke AHT, bei einiger Vorsicht müsste das doch brauchbar sein, oder?
    Im übrigen: Die ErrorProc kann sehr wohl nach beenden dort anschließend weitermachen, wo im Hauptprogramm der Fehler passierte. Warum sollte das für RGH mit einer TimerProc nicht möglich sein? Schließlich: Was ist schon 100% sicher im Leben?
    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Es ist im Prinzip nicht möglich, da intern Delphivariablen von XProfan überschrieben werden. Aus gleichem Grund ist XProfan auch nicht multithreadingfähig. Um das überhaupt nutzen zu können, musst du sehr viel Wissen über das Innenleben der Programmiersprache mitbringen (und zwar von jeder Version) - manchmal ist es nämlich irrelevant, das etwas überschrieben wird (wenn man es nicht nutzt).
    Folgendes Beispiel:


    Drücke mal sehr oft den Button - es wird irgendwann ein Dialog erscheinen, in dem kein Textfeld existiert... ;-)
    Wann Fehler passieren und ob, hängt davon ab, wann XProfan die Ausführung einer Zeile verlässt und wegen Aufruf der TimerProc eine andere Zeile abarbeiten will. Ist die erste Zeile noch nicht abgeschlossen, passieren Fehler.

  • Alleine mit xprofan ist es gefährlich da hatte ich nur abstürze aber seit dem ich xpse mit dazu nehme gehts und dann kann man echte Timer mit machen (mache ich auch und geht):



    Habe ich von der seite geklaut: http://xprofan.net/xpse/funktionsreferenz.html

  • Um mich bei der Sprache noch mit irgendwelchen Zusatztools zu beschäftigen, die in anderen Sprachen komplett unnötig sind, fehlt mir persönlich die Zeit und Lust. Testen werde ich das Tool deshalb nicht. Meiner Meinung nach sollte man seine Zeit (zwei Tage bei mir) besser in das Lernen von Sprachen investieren, die von sich aus das können, was man möchte, als seine Zeit mit Zusatzkrücken zu verschwenden, die in der Regel wiederum nicht alles bieten, was über API möglich ist und eventuell zu weiteren Problemen führen, die man gar nicht abschätzen kann.


    Warum fehlt mir die Lust: Seit ich die Funktion von Tools, die ich in der Sprache progge, auf mehren hundert Rechnern mit unterschiedlicher Konfiguration beobachten kann, treten immer mehr Probleme mit der Sprache zutage. Das letzte hatte ich vor kurzem (ist erst zwei Tage her). Würde ich Drittanbietersoftware verwenden, könnte ich nicht einmal sagen, ob es an dieser Drittanbietersoftware liegt oder an der Sprache bzw. an meiner Version der Sprache.


    Ich kann eigentlich nur dazu raten, seine Zeit nicht damit zu vertrödeln, an etwas, das für das was man will unzureichend ist, auch noch irgendwelche Zusatztools anzubasteln. Besser gleich Nägel mit Köpfen machen und was anderes verwenden. Das geht schneller, läuft sicher und bringt mehr.

  • Das verstehe doch mal einer, so wenig zeit und lust wie du hast und dann doch so ausführlich.


    Wie ich das verstehe rätst du ja von Xprofan generell ab. Wer programmiert denn in irgendwas ohne Zusatztools.


    Das Xprofan ist einfach und alles kann man damit nicht machen. Aber trotzdem kann man es doch erweitern und verbessern und dann kann man wieder mehr damit machen. dann gleich von eine Sprache abraten auch noch in dem Forum hier ist nicht gut.


    Es verlangt ja wohl auch keiner das DU Zeit und Lust aufbringst dich damit zu beschäftigen. Ich wollte doch nur einen tip geben wie es geht für die noch lust auf Xprofan und Zusätze haben.

  • Für Eure Tipps und ausführlichen Beitäge bin ich sehr dankbar und lerne viel daraus :idea: Es gibt halt nix ohne Vor- und Nachteile - diese abzuwiegen, das muss wohl jeder selbst machen. Jedenfalls kann ich beide Haltungen verstehen, die des Profis auf Systemseite, die des Anwendungsproggers und sogar meine, also die des Vollpfostens, für den XProfan eigentlich gedacht war.


    Beste Grüße, Euer
    P. Specht

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Du solltest Dich nicht als Vollpfosten bezeichnen. Du traust Dich an Probleme ran, von denen andere nicht mal wissen, daß die überhaupt existieren. :top:


    Und was die Programmiersprachen angeht, es gibt viele. Der Vollprofi kennt davon mehrere und setzt immer die ein, die für ein bestimmtes Problem am Besten geeignet ist. Und das ist eben im Regelfalle die, die etwas ohne irgendwelche Krücken oder andere Hilfsmittel kann.


    Gruß Volkmar

  • Zitat

    Und was die Programmiersprachen angeht, es gibt viele. Der
    Vollprofi kennt davon mehrere und setzt immer die ein, die für ein
    bestimmtes Problem am Besten geeignet ist.

    Darauf wollte ich hinaus du sagst es und man muss kein voller profi sein um zu wissen was schlecht funktioniert und was gut funktioniert da reichts hinzuschauen und testen.

    Zitat


    Und das ist eben im Regelfalle die, die etwas ohne irgendwelche Krücken oder andere Hilfsmittel kann.

    Der stand war was tun wenn es nicht ohne geht. was die regel ist weiß ich auch schon aber was ist eine regel wert wenn sie nichts und niemand was bringt.

  • Nein, ich lehne die Sprache nicht generell ab. Man sollte damit aber besser nichts versuchen, für das die Sprache nicht geeignet ist. Mit anderen Sprachen geht das meiner Erfahrung nach einfacher und sicherer.
    Ist man darauf angewiesen, dass Anwendungen, die man schreibt, überall sicher laufen, bekomme ich persönlich leider immer mehr den Eindruck, dass man besser andere Sprachen verwenden sollte. Leider betone ich hier, weil ich sehr gerne mit der Sprache gearbeitet habe und die eigentlich auch anderen näherbringen wollte. Das ist, wie gesagt, der Eindruck den ich gewonnen habe. Ob man die Einschätzung teilt, überlasse ich jedem selbst.


    Dass du die Sprache für einfach hälst, zeugt meiner Meinung nach davon, dass du recht wenig mit ihr tust. Ich stimme die vollkommen zu, wenn es darum geht, ein paar Zeilen zusammenzukloppen und sich nachher darüber zu freuen, das irgendetwas auf dem Bildschirm erscheint. Ist für Bastler also toll. Entwickelt man etwas anspruchsvolleren Code, wird das mit der Sprache sehr kompliziert. Selbst in dem Fall hier mit der TimerProc ist das nicht einfach, denn man muss erst mal verstehen, warum überhaupt irgendwelche Zusatztools braucht, um das ansatzweise tun zu können, was andere Sprachen von sich aus können. Ist das einfach? Ich denke nicht. Programmieren ist damit also eher schwierig. Man lernt aber einiges, wenn man es trotzdem versucht :grinz: .


    Ganz abgefahren und kompliziert wird es, wenn man in die Tiefen der API Programmierung eintaucht - zum Beispiel den Security Bereich. Ich musste da damals ganz schön tricksen, damit Anwendungen nicht zeitweise abstürzen (etwa alle 50 Programmstarts passierte da auf manchen Rechnern was bei der Ausführung der API AddAce). Lag, wie es aussieht, an einem Timingproblem mit der Sprache - habe ich dann am Ende noch sicher hinbekommen (mit viel Trickserei).
    Für mich persönlich bedeutet "einfach", mich an die Dokumentation von Microsoft halten zu können, und nicht laufend mit unvorhersehbaren Ergebnissen rechnen zu müssen, obwohl ich mich daran halte. Alles andere ist unnötig kompliziert.


    Um Sachen anzutesten, setze ich Profan auch noch ganz gerne ein. Zwar fummele ich da etwas länger mit den APIs herum bis der Code steht, die Zeit spare ich aber wieder bei der Test-GUI ein. Ich habe neulich da zum Beispiel mal was entwickelt, um Sachen am Security Descriptor vorbei aus der Registry lesen zu können - also ohne die Rechte dafür zu haben. Das setze ich jetzt bei Bedarf in einem Programm mit einer anderen Sprache im Antivirenbereich ein.
    Ich lehne die Sprache also nicht ab. Ob ich im Endeffekt ein XProfan Programm schreiben würde, dass diese Technik nutzt, steht dabei aber auf einem ganz anderen Blatt.


    Zitat

    Ich wollte doch nur einen tip geben wie es geht für die noch lust auf Xprofan und Zusätze haben.


    Und ich wollte nur darauf hinweisen, dass es Möglichkeiten gibt, die weniger Zeit und Kopfschmerzen kosten, als sich bei der Sprache auch noch mit Zusätzen von Drittanbietern zu beschäftigen - erst recht, wenn man wie "p.specht" über Jahre immer wieder mit der Sprache Sachen erreichen will, die damit von sich aus nicht gehen.


    Die Lust und Zeit, die ich angesprochen habe, bezieht sich hauptsächlich darauf einmal auszuprobieren, ob mit dem Tool überhaupt das möglich ist, was die API bietet. Ich werde das Ding also nicht herunterladen und Rückmeldung geben, weil das für mich nichts bringt. Da "p.specht" ja bereits gedacht hat, mein Code wäre die Lösung seiner Probleme (was er ja nicht ist), wird er auch nicht feststellen können, ob das Tool wirklich sein Problem löst und das tut, was er will. Ich werde ihm da auch nicht weiterhelfen. Es fehlt mir da an Zeit und Lust mich mit solchen Sachen noch wirklich zu beschäftigen.
    Was sein Problem auf jeden Fall löst (und viele andere seiner Probleme dieser Art in der Vergangenheit auch), wäre das Lernen einer anderen Sprache. Im Endeffekt ist das der bessere und schnellere Weg als immer wieder zu versuchen, Unzulänglichkeiten durch Flickzeug zu lösen (vorausgesetzt, man will wirklich programmieren und nicht nur basteln).


    Zitat

    ...und man muss kein voller profi sein um zu wissen was schlecht funktioniert und was gut funktioniert da reichts hinzuschauen und testen.


    Um das zu erkennen, braucht man ein bischen Überblick. Humpelt man immer wieder mit neuen Krücken weiter, bekommt man den nicht. Man denkt dann eher, Krücken sind das optimale Fortbewegungsmittel.


    Zitat


    Der stand war was tun wenn es nicht ohne geht.


    Sich zigtausend Krücken anschaffen und mit denen weiter humpeln - oder sich einen Satz neue Beine leisten???
    Du stehst eher auf Krücken, ich eher auf neue Beine. Das ist Erfahrungssache.

  • Zitat

    Du stehst eher auf Krücken, ich eher auf neue Beine. Das ist Erfahrungssache.


    Du schreibst du hast keine Erfahrung damit, ich schreibe das es damit sehr gut geht. Ich habe damit viel Erfahrung. Ob ich stehe auf Krücken statt auf Beine wie du sagst und dies sei deine Erfahrung, das bezweifle ich, weil du damit keine Erfahrung hast, ich habe damit aber. Ich weiß nicht wie objektiv du bist, aber rede meine programmarbeit nicht schlecht, denn sie funktioniert fehlerfrei. Was du machst ist konstruktion, dass hat nur bedingt mit Erfahrung zu tun, meist aber mit unerfahrenheit.


    Aber warum darüber so viel behandeln. Ich verstand das die Frage nach dem timer lautet und das beispiel ist ganz fehlerfrei. Und das Beispiel wurde hier nicht genannt, was ich wollte war helfen, mit meiner Erfahrung und nicht mit unerfahrenheit. Man kann damit auch viel mehr und muss nicht andere Sprachen lernen. Ich kann auch andere sprachen und entscheide nicht ohne großes testen. Wer andere sprachen lernen will hat freie wahl, aber thema war timer mit xprofan und ich wollte nur meine gute Lösung zeigen.