Wie kann ich trotz einer Endloswarteschlange meinen Code ausführen?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ein Discord Bot läuft ja normalerweise nicht von oben nach unten im Quellcode wie ein Programm sondern, wird durch Commands, EventHandler, Reactions usw. aktiv

FlutterFrage 
Fragesteller
 12.02.2024, 13:40

Ja, aber mein message event funktioniert nicht, seit ich die endlosschleife hinzugefügt habe

0
CSANecromancer  12.02.2024, 16:56
@FlutterFrage

Wie sollte das auch gehen, wenn du die Abarbeitung der Events nicht in deine Schleife integriert hast?

0

Schwierig zu beantworten ohne deinen Code, Sprache und eventuell Library zu kennen, aber vermutlich brauchst du einen anderen Weg deinen Task auszuführen.

Was du möchtest ist concurrency. Das heist, an mehreren Aufgaben arbeiten bevor ein Task komplett abgeschlossen ist.

dafür gibt es theoretisch mehrere Möglichkeiten

* coroutines die unterbrochen werden können und später weiter ausgeführt

* Event basiertes scheduling bei der du eine Reihe an Events hast die abgearbeitet werden und dann immer wieder diese Aufgabe hinten an die Reihe angehangen werden (so funktioniert das zb in Javascript)

* durch mehrere Threads/CPU Kerne an mehreren Aufgaben gleichzeitig arbeiten. Dann führt man Aufgaben nicht nur concurrent sondern auch parallel aus.

wenn du eine fertige Library nutzt basiert diese eventuell schon auf solchen Techniken und du musst nur darauf achten, deine eigenen Event Handler vor deiner endlos Schleife zu registrieren.

Falls nicht musst du dich mit Tasks, async/await oder vergleichbaren Syntax, coroutine, event scheduling oder vergleichbaren beschäftigen je nach Sprache. Alle halbswegs modernen populären Sprachen haben da fertige Möglichkeiten.

Zu den oben genannten Themen wirst du sicher etwas finden, gerade zu async oder Tasks. Ansonsten bräuchte man wie gesagt mehr Infos was das konkrete Problem ist.

Jede moderne Sprache bietet EventHandling oder parallele Threads an.
Die PING Geschichte soll ja nur alle 60 sec laufen, also quasi für ein "Timer Event" genau das richtge, was dann nach dem gewünschten Zeitraum "kurz" das Hauptprogramm "unterbricht" um diese exklusive Aktion durchzuführen, um dann im Anschluss wieder ALLE Rechenleistung dem Hauptprogramm zu belassen.
Im Moment scheint es genau anders herum programmiert.
Also noch mal das generelle SW Design überdenken.

das ganze auf einen extra thread legen würde ich sagen

Woher ich das weiß:Hobby – hobby programmierer seit 2020