2 Aktionen gleichzeitig ausführen
-
Hallo
xBlackKnightx schrieb:
so ne wechselwirkung einbauen?
Warum trollst du hier in allen Foren rum? was soll denn das?
chrische
-
chrische5 schrieb:
Hallo
xBlackKnightx schrieb:
so ne wechselwirkung einbauen?
Warum trollst du hier in allen Foren rum? was soll denn das?
chrische
was heisst hier trollen? man baut ne wechselwirkung ein. fertig.
man lässt die befehle wechselwirken
hier nur eine idee:while() { //prozess 1 seite1: // befehle usw... if (fertig1 == false) goto seite2; if (fertig2 == true) break; } while() { //prozess 2 seite2: // befehle usw... if (fertig2 == false) goto seite1; if (fertig1 == true) break; }ja es gibt multithreading http://www.codeworx.org/cpp_tuts_1_5.php
er hat nicht angegeben auf welchem plattform er arbeitet
-
Igitt, das sieht ja grauenhaft aus (imho gehört 'goto' aus dem Sprachumfang von C++ verbannt). Und außerdem verarbeitet das die Aktionen nicht unabhängig voneinander, sondern abwechselnd - also könntest du das auch zu einer Schleife zusammenfassen (wenn es überhaupt das Originalproblem lösen würde).
-
xBlackKnightx: Das ist echt ein wiederlicher Code!
Es gibt übrigens Plattformübergreifende Lösungen für Multithreading.grüße
-
xBlackKnightx hat eine Lösung vorgeschlagen. Sie ist nicht falsch. Ob sie schön, gut oder optimal ist, ist eine ganz andere Frage. Und da er anscheinend keine Threads kennt, hat er eine ihm bekannte Lösung genannt. Würd enicht sagen, das es trollen ist.
Aber damit ich auch noch meine Lösung anbieten kann: Benutze Threads. Da wird die "Wechselwirkung" vom Betriebssystem erledigt und ist viel sauberer, eleganter und komfortabler. Sie ist einfach nur gut.

-
...aus einer Schleife in eine andere springen. Pfui deibel, schäm dich!

-
jaja weiss schon goto ist nicht so gut ^^
aber die suche hier spuckt keine richtigen resultate raus wenn ich Multithreading eintippe
oder mit *Multithreading* oder thread... kann er was vernünftiges finden? ja anderes kenne ich auch nix
vielleicht ist das hier besser:
http://cplus.kompf.de/artikel/threads2.html
-
Das Wort "Wechselwirkung" ist so vollkommen unpassend dass ich auch überzeugt davon war dass es sich um einen Troll handelt.
@xBlackKnightx: Entschuldigung an dieser Stelle für das Kommentar in einem anderen Thread, ich dachte du schreibst absichtlich Müll (in diesem Thread hier).
@Topic:
Wenn man die Sache ohne Multithreading lösen will, dann sollte man wohl state-machines verwenden.class MachineA { public: void Update() { switch(m_state) { // ... } } // ... private: // ... }; class MachineB { public: void Update() { switch(m_state) { // ... } } // ... private: // ... }; int main(int, char**) { MachineA a; MachineB b; while(!(a.IsDone() && b.IsDone()) { a.Update(); b.Update(); } }Oder so ähnlich.
Je nach Plattform/Framework/... kann man sich auch fertiger Konstrukte bedienen, wie z.B. Windows (unter Windows, wxWidgets, ...), wo man dann Messages als Events verwendet, und sich z.B. Timer setzt (die dann ne Message schicken) wenn man etwas periodisch machen muss ohne dass ein externes Ereignis auftritt.
-
Wenn man die Sache ohne Multithreading lösen will, dann sollte man wohl state-machines verwenden.
Oder so eine alte, aber immer noch gute Idee, wie das Active-Object-Pattern.
-
Autsch....
So viele verschiedene Antworten.....mhh....ich probier einfach mal n paar aus und schau welches sich für mein Problem am besten eignet....
Thx an alle!
-
@HumeSikkins:
Naja, weiss nicht ist ein Active Object keine state machine? Denke schon...
Egal.
-
Naja, weiss nicht ist ein Active Object keine state machine? Denke schon...
Hättest du Command geschrieben, würde ich zustimmen, aber eine state machine muss ein Active Object weder implementieren noch sein. In meinen Augen ist state machine sowieso ein tiefer liegenedes Konzept.
Egal.
Oh. Tut mir leid

-
HumeSikkins schrieb:
Naja, weiss nicht ist ein Active Object keine state machine? Denke schon...
Hättest du Command geschrieben, würde ich zustimmen, aber eine state machine muss ein Active Object weder implementieren noch sein. In meinen Augen ist state machine sowieso ein tiefer liegenedes Konzept.
Ein Active Object hat einen State (pending, complete, ...) und Events (z.B. completed) die für state transitions sorgen. Was ist daran bitte keine state machine? Verstehe nicht was du meinst.
Egal.
Oh. Tut mir leid

Blubb?
EDIT: dann mach mers halt wieder her wenn schon so ein Koffer geantwortet hat.
@HumeSikkins: wir sprechen hier schon über das selbe, also inetwa dashier: http://www.titu.jyu.fi/modpa/Patterns/pattern-ActiveObject.html
-
hustbaer schrieb:
HumeSikkins schrieb:
Naja, weiss nicht ist ein Active Object keine state machine? Denke schon...
Hättest du Command geschrieben, würde ich zustimmen, aber eine state machine muss ein Active Object weder implementieren noch sein. In meinen Augen ist state machine sowieso ein tiefer liegenedes Konzept.
Ein Active Object hat einen State (pending, complete, ...) und Events (z.B. completed) die für state transitions sorgen. Was ist daran bitte keine state machine? Verstehe nicht was du meinst.
Egal.
Oh. Tut mir leid

Blubb?

-
@hustbaer
Ich denke schon, dass wir vom selben Pattern reden, nur scheinst du eine konkrete Ausprägung zu meinen. Wenn ich ne Menge von Command-Objekten in eine Queue stopfe, diese kontinuierlich abarbeite und einige (oder alle) Command-Objekte sich nach der Ausführung wieder in die Queue hängen (oder auch alternative Commands), dann ist das ebenfalls eine Ausprägung des Active-Object-Patterns und weit und breit ist keine State-Machine zu sehen. D.h. natürlich überhaupt nicht, dass State-Machines ausgeschlossen sind. Die Bearbeitung der Queue könnte z.B. durch eine solche gesteuert sein. Nur ist das kein Zwang, der inheränt in dem Pattern steckt.Und dein "Egal" signalisierte mir, dass du nicht daran interessiert warst andere Meinungen zu hören, sondern vielmehr deine rhethorische Frage als Fakt angesehen haben möchtest.
-
@HumeSikkins:
Das "Egal" sollte bloss bedeuten dass es mir nicht so wichtig ist
, nicht dass ich überzeugt davon bin nun unbedingt Recht zu haben.Ich sehe jetzt denke ich den Denkfehler den ich gemacht habe. Das Active Object Pattern lagert ja die Abarbeitung eines "Active Object" (ich glaube dass ist das was du "Command" nennst?) in einen anderen Thread aus. Daher ist hier keine explizite state machine notwendig.
Ich hatte zuerst den Eindruck dass alles in einem Thread läuft, da hier ja auch ursprünglich über Alternativen zu Multithreading gesprochen wurde, und nicht über spezielle Formen die aber auch zumindest 2 Threads brauchen.
Und sobald nurmehr 1 Thread für alles verwendet wird glaube ich muss das "Command" oder "Active Object" für alle nicht-trivialen Aufgaben eine state machine sein. Events für diese state machines können dann von verschiedensten Stellen z.B. über asynchronous io, timer, diverse os callbacks etc. kommen -- dann geht das auch ohne eigenen worker thread.
Mir kommt das Pattern halt ähnlich vor wie das IRP processing unter Windows NT -- und da gibts nicht notwendigerweise einen thread der IRPs arbeitet, und alle nicht trivialen IRPs sind im prinzip state machines. Meist recht einfache natürlich.
So. Weiss nicht, vielleicht hab ich das Pattern wirklich nicht verstanden, kannst mich ja korrigieren wenn ich wieder Dummsinn geschrieben hab

-
hustbaer schrieb:
Ich sehe jetzt denke ich den Denkfehler den ich gemacht habe. Das Active Object Pattern lagert ja die Abarbeitung eines "Active Object" (ich glaube dass ist das was du "Command" nennst?) in einen anderen Thread aus. Daher ist hier keine explizite state machine notwendig.
Die einfachste Variante des Active Object Patterns verwendet nur einen Thread. Genauergesagt eine (Endlos-)schleife, die kontinuierlich eine Queue von Command-Objekten (im Sinne des Command-Patterns) abarbeitet (das ist dann die Active Object Engine). Einzelne Command-Objekte führen (Teil-)Aktionen aus und hängen sich (oder andere Teil-Aktionen) dann wieder ans Ende der Queue. Damit kann man dann also letztlich ein MT-Thread ähnliches System bauen, dass nur einen BS-Thread verwendet. Die einzelnen Command-Objekte sind dabei die "Threads" (in Anführungszeichen, da es sich nicht um echte BS-Threads handelt), die man für gewöhnlich als run-to-completion tasks bezeichnet. Ein Grundsatz für einen solchen Task ist, dass er nicht blockierend sein darf. Ziel des Ganzen ist eine "temporale Entkopplung" von Aufgaben.
Natürlich gibt es Aufgaben, wo die Active Object Engine oder einzelne Active Objects sinnvollerweise durch eine State-Machine implementiert wird. Aber wie gesagt: das muss nicht sein.
-
igittigittigitt goto
In Assembler kannst du mit Sprungmarken zu arbeiten, aber doch nicht in C++, das ist extrem hässlicher Code, nimm Threads, hier gibts beispielcode für Threads unter Windows http://de.wikipedia.org/wiki/Thread_(Informatik)
-
Die einzelnen Command-Objekte sind dabei die "Threads" (in Anführungszeichen, da es sich nicht um echte BS-Threads handelt), die man für gewöhnlich als run-to-completion tasks bezeichnet. Ein Grundsatz für einen solchen Task ist, dass er nicht blockierend sein darf. Ziel des Ganzen ist eine "temporale Entkopplung" von Aufgaben.
@HumeSikkins: Ok, gut. Bloss ich nenne diese Art von Command-Objekt eben state machine
Denn du kannst ja kaum irgendwas da drinnen machen was nicht trivial ist (also wo man nicht jedes mal das gleiche macht bei jedem Durchlauf). Ok, zugegeben, diese Command Objekte müssen den State nicht selbst halten sondern können auf irgendwelche anderen Objekte/Strukturen verweisen wo der drinnen ist. Trotzdem, in meinem kranken Hirn sind das dann state machines mit einem "tick" oder "update" Event der den ganzen Ablauf vorantreibt.Bloss dass sie halt ein gemeinsames Interface haben, und in einer Liste/Queue stecken.
Oder anders argumentiert: was ist denn ein "Thread" (egal ob echt oder "nachgestrickt") wenn kein "Zustandsautomat" (aka. state machine)?
Schon... oder?