Future
Übersicht

![]() |
ThunderBetreff: Future |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo alle miteinander!
Sind zwar nicht mehr viele da, aber ich hab wieder was kleines für BlitzMax geschrieben. Ich habe (so gut es ging) C++ Futures für BlitzMax implementiert. Eine Future ist ein Objekt, das eine Aufgabe/Funktion asynchron ausführt und das man dann nach dem Rückgabewert abfragen kann, wenn man ihn braucht. In C++ sieht das so aus Code: [AUSKLAPPEN] auto str = "irgendein langer string der verschluesselt werden soll"s;
auto fut = std::async( AES(str) ); // tue irgendwas anderes auto encrypted = fut.get(); In der zweiten Zeile wird die Funktion AES(x) asynchron aufgerufen (was ein future objekt erzeugt, das wir in fut speichern). D.h. während die Funktion läuft, läuft der Code einfach weiter. Wenn man fut.get() aufruft und die Funktion noch nicht zu Ende ist, wird gewartet bis sie zu Ende ist und der return wert geliefert. Wenn sie zu dem Zeitpunkt schon beendet ist, wird der Return wert sofort geliefert. In BlitzMax schaut das ganze leider etwas klobiger aus ![]() BlitzMax: [AUSKLAPPEN] Local str:String = "irgendein langer string der verschluesselt werden soll" Da ich in BlitzMax mit Object arbeiten musste, gibt es zwei Unannehmlichkeiten: 1. Alle Funktionen, die nicht aussehen wie f:Object(o:Object) brauchen Wrapper 2. Das Übergeben von primitiven Datentypen als Parametern und zurückgeben von primitiven Datentypen ist wegen Object nicht möglich. Dazu braucht man Wrapper-Types. Trotzdem mag ich die Idee, weil man sich nicht um Threading und Locking kümmern muss. Das Modul ist übrigens so implementiert, dass es sich auch im nicht-multithreaded modus kompilieren lässt (dann wird halt auch nichts gleichzeitig ausgeführt). Modul-Download + Beispiele: https://www.blitzforum.de/upload/file.php?id=13090 1. Beispiel: BlitzMax: [AUSKLAPPEN] Local s1:String, s2:String, time = MilliSecs() Läuft bei mir: threaded: in ~1000 ms nicht threaded: in ~ 1200 ms Das 3. Beispiel zeigt die Callback-Futures, wo ich mir nicht sicher bin, ob die schon funktionieren... eine CallbackFuture nimmt in Create noch einen dritten Parameter, nämlich ein Callback, das aufgerufen wird, wenn der Returnwert bereitsteht. BlitzMax: [AUSKLAPPEN] Local str:String = "irgendein langer string der verschluesselt werden soll" Problem : ich habe das gefühl, dass Print/WriteStderr etc. nicht thread-safe sind.. :/ Alle Funktionen: BlitzMax: [AUSKLAPPEN] Type Future |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am Mo, Dez 07, 2015 21:29, insgesamt einmal bearbeitet
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das schaut recht cool aus! Find ich eine nette Idee, so auf die Art Instant-Multithreading. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group