ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > AsyncIO ? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
26.02.2008, 10:49 Uhr MaikG Posts: 5172 Nutzer |
Kann ich sowas machen: fh&=xOpen&(SADD("tcp:www.amiga-news.de/80"+CHR$(0)), MODE_READWRITE&) fh&=xOpen&(SADD("tcp:www.google.de/80"+CHR$(0)), MODE_READWRITE&) also mit der asyncio.library, so das 1. sofort zurückkommt unabhängig ob die Seite (schon) geöffnet werden konnte? Mit der dos.library kommt das im Fehlerfalle erst nach 1 Minute zurück. [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 11:58 Uhr akl Posts: 265 Nutzer |
@MaikG: Das hängt vom TCP-Handler ab. Vermutlich nicht. Wieso probierst Du es nicht einfach aus? [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 12:43 Uhr thomas Posts: 7718 Nutzer |
@MaikG: Die asyncio.library macht nur ein asynchrones Lesen, kein asynchrones Öffnen. Wenn du nicht auf Open warten möchtest, mußt du das selbst asynchron machen (also selbst das Packet zusammen basteln und an den Handler schicken). Schau auch mal da rein: http://www.amiga-news.de/forum/thread.php?id=23552&start=61&BoardID=7#238048 Da ist das mit den Packeten bei Read und Write beschrieben. Du müßtest nur noch herausfinden, was man bei Open für ein Packet verwenden muß (Tipp: RKRM DOS; ist leider nicht auf der Developer-CD drauf). Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 15:39 Uhr MaikG Posts: 5172 Nutzer |
>Das hängt vom TCP-Handler ab. Vermutlich nicht. Wieso probierst Du >es nicht einfach aus? Dann muss ich mir erst eine Bitmap und Includes für Basic basteln. >Die asyncio.library macht nur ein asynchrones Lesen, >kein asynchrones Öffnen. Wenn du nicht auf Open warten möchtest, >mußt du das selbst asynchron machen (also selbst das Packet >zusammen basteln und an den Handler schicken). Das ist mir zu hoch, ich weiss nichts von Paketen. Vermutlich schaffe ich es eher mehrere Task Instanzen zu starten die selbst das Open vollziehen. [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 20:47 Uhr Holger Posts: 8116 Nutzer |
Zitat:In Basic?! Niemals. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 20:59 Uhr Ralf27 Posts: 2779 Nutzer |
Versuch doch einfach mal folgendes: http://www.amiga-news.de/forum/thread.php?id=26649&BoardID=7#268959 Ich hatte das gleiche Problem, mit der bsdsocket.lib läuft es. Ich bin da endlich rein gekommen und schreib jetzt gerade ein Game von mir um auf bsdsocket.lib für bis zu 6 Spieler über TCP/IP. Wenn man erst mal irgendwie drin ist, dann geht es. An dieser Stelle nochmal ein Danke an Holger, ohne ihn hätte ich es nie geschaft. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 21:00 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Jetzt mal interessenhalber: Wieso denn nicht? Was macht es denn von Basic aus unmöglich? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
26.02.2008, 22:50 Uhr MaikG Posts: 5172 Nutzer |
>In Basic?! >Niemals. Simple Task ist ein Beispiel von Maxonbasic. Da läuft ein Counter der sich absetzt und das Hauptprogramm kann in der Zeit etwas anders tun. Allerding war da irgendwas mit System aufrufen glaube ich. >http://www.amiga-news.de/forum/thread.php?id=26649&BoardID=7#268959 >Ich hatte das gleiche Problem, mit der bsdsocket.lib läuft es. Bis darauf das es bei fehleingaben schnell instabiel wird tut es das gleiche wie tcp: Oder? >Wenn man erst mal irgendwie drin ist, dann geht es. Ja, irgendwie ist das immer so :-) [ - Antworten - Zitieren - Direktlink - ] |
27.02.2008, 16:36 Uhr Holger Posts: 8116 Nutzer |
Zitat:Natürlich enthält es Systemaufrufe. So sehr es mich überrascht, dass es tatsächlich ein aussagekräftiges Beispiel von MaxonBasic geben soll, so sehr beruhigt es mich wiederum, dass es wie üblich nicht wirklich Features von MaxonBasic zeigt. Natürlich kann ich einen kleinen Counter in 68k-Assembler schreiben und den Binärcode über irgendeinen Hack (DATA, TAGLIST, POKE oder String-Konstante) ins Basic-Programm übernehmen, um ihn dann mittels Systemaufruf zu starten. Ich wette zehn zu eins, dass es darauf hinausläuft. Dass diese Vorgehensweise mit einem SubTask für asynchrone I/O auch noch praktikabel ist, wage ich mal zu bezweifeln. Zumal ich den Mehrwert nicht erkennen kann, eine solchermaßen geschriebene Routine noch mit einem Basic-Programm einzurahmen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
27.02.2008, 16:41 Uhr Holger Posts: 8116 Nutzer |
Zitat:Dazu müsstest Du wissen, welche Sprachkonstrukte thread-safe, bzw. reentrant sind und außerdem, wie Du die Laufzeitumgebung initialisieren musst, um ein Stück Basic-Code aus einem externem Kontext aufrufen zu können. Und dann müssen Deine Tasks auch miteinander kommunizieren. Und das wirst Du kaum auf einfachere Art hinbekommen als DOS-Packets. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
27.02.2008, 17:53 Uhr MaikG Posts: 5172 Nutzer |
Nichs Assembler, ein Basic Sub setzt sich da ab: ' The sub-task, the range of things this can do are pretty limited: it absolutely ' must not-ever call DOS (since you must be a process to do that), this means that ' many BASIC commands are out. It must not do anything which may cause non-reentrant ' BASIC runtimes to be reentered (e.g. string handling, dynamic array usage). ' ' Basically you can call the OS do simple BASIC stuff and little else. ' [ - Antworten - Zitieren - Direktlink - ] |
27.02.2008, 18:21 Uhr thomas Posts: 7718 Nutzer |
@MaikG:Zitat: Und schon ist dein Plan mit dem Open im Sub-Task gestorben. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 00:10 Uhr MaikG Posts: 5172 Nutzer |
>Und schon ist dein Plan mit dem Open im Sub-Task gestorben. Ja, war ebend richtig meine erinnerung. Man kann wohl auch sehr einfach C oder Assembler Functions in MB einbinden, da wäre ein absetzen sichlich möglich... Oder halt ein 2. Basic Programm das man nur die Parameter über gibt und mit RUN startet. [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 09:46 Uhr Holger Posts: 8116 Nutzer |
Zitat:Das Problem mit den DOS-Funktionen hat überhaupt nichts mit der Frage Basic oder C oder Assembler zu tun, sondern einfach nur damit, dass ein Task (erzeugt via CreateTask oder so) Limitierungen hat. Stattdessen muss eben ein Prozess über eine der zugehörigen DOS-Funktionen gestartet werden. Das "must not-ever call DOS" ist ohnehin veraltet, weil viele DOS-Funktionen inzwischen auch von Tasks aufgerufen werden können (muss man die zugehörigen Autodocs prüfen), dann allerdings ressourcenfressender sind, weil bei jedem Aufruf ein temporärer MessagePort erzeugt werden muss. Ansonsten zeigt das Beispiel, selbst ohne dass Du es gespostet hast, wohin der Hase läuft: "Du darfst viele Basic-Befehle nicht benutzen (wir sagen Dir nicht welche), strings und dynamische arrays dürfen nicht benutzt werden (war ja klar) und prinzipiell kannst Du fast gar nichts machen"... Zitat:Dann sind wir wieder am Ausgangspunkt. Du hast zwei Programme (so wie im Falle Anwendung und DOS-Treiber auch) und beide müssen miteinander kommunizieren (über Messages oder über DOS-Packets, da ist kaum ein Unterschied). Dass das einfacher sein soll, als gleich DOS-Packets an den Handler zu verschicken, bezweifle ich auch weiterhin. Beim DOS-Handler kannst Du Dir zumindest sicher sein, dass er keine kritischen Basic-Funktionen aufruft. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 10:13 Uhr MaikG Posts: 5172 Nutzer |
>Dann sind wir wieder am Ausgangspunkt. Du hast zwei Programme >(so wie im Falle Anwendung und DOS-Treiber auch) und beide müssen >miteinander kommunizieren (über Messages oder über DOS-Packets, >da ist kaum ein Unterschied). Dass das einfacher sein soll, als >gleich DOS-Packets an den Handler zu verschicken, bezweifle ich >auch weiterhin. Beim DOS-Handler kannst Du Dir zumindest sicher >sein, dass er keine kritischen Basic-Funktionen aufruft. Man muss nicht zwangsweise über das System kommunizieren. Für mich ist es einfacher, weil davon verstehe ich was, von Packets nicht. Ja, soweit hab ich das auch hinbekommen es laufen zur zeit 6 "Subtasks". Allerdings gibts da noch ein paar probleme mit TCP: Irgendwann liess es sich gar nicht mehr öffnen. Rausbekommen ob es überhaupt von mehr als 1 Programm gleichzeitig benutzt werden kann hab ich auch noch nicht wirklich. [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 10:29 Uhr Holger Posts: 8116 Nutzer |
Zitat:Doch. Es gibt keine andere Möglichkeit im Multitasking, es sei denn, Du weißt, wie man eine Semaphore selbst implementiert (Tip: es gibt keine Hochsprache, in der das möglich ist). Zitat:Nein, von Inter-Task Kommunikation verstehst Du offensichtlich überhaupt nichts. Zitat:Welch Überraschung, es gibt ein paar Probleme. Warte erst einmal, bis die Dinge, die bislang nur per Zufall funktionieren, auch mal überraschende Probleme bereiten... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 13:18 Uhr MaikG Posts: 5172 Nutzer |
>Doch. >Es gibt keine andere Möglichkeit im Multitasking, es sei denn, >Du weißt, wie man eine Semaphore selbst implementiert (Tip: es >gibt keine Hochsprache, in der das möglich ist). Es läuft aber. Du gibtst deinen Subtask ein Speicherbereich, in dem dieser seine Informationen ablegt und auch bekommt. Im Hauptprogramm prüfst du z.B. jede Sekunde auf ein Byte, welches der Subtask beim Beenden löscht. Fertig ist die kommunikation ohne Betriebssystem. >Welch Überraschung, es gibt ein paar Probleme. Warte erst einmal, >bis die Dinge, die bislang nur per Zufall funktionieren, auch mal >überraschende Probleme bereiten... Die 1. OPEN Routine kahm mit einem Fehler zurück. Diese liegt noch im Hauptprogramm, bevor die Subtasks gestartet wurden. Das ist kein Programm fehler meinerseits. [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 18:17 Uhr DrNOP Posts: 4118 Nutzer |
Zitat:Zufall? Zitat:Zustandsautomat? Das kann eine SPS auch - und die funktionieren nachgewiesenermaßen auch ohne Multitasking. Der Effekt ist, daß deine CPU mit 100% Leistung rödelt, obwohl an sich überhaupt nichts zu tun ist. Ohne Betriebssystem bleibt dir nichts anderes übrig, als solche Konstrukte zu verwenden - mit Betriebssystem ist es ziemlicher Quark. -- Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker [ - Antworten - Zitieren - Direktlink - ] |
28.02.2008, 19:25 Uhr MaikG Posts: 5172 Nutzer |
>Zustandsautomat? Das kann eine SPS auch - und die funktionieren >nachgewiesenermaßen auch ohne Multitasking. SPS? >Der Effekt ist, daß deine CPU mit 100% Leistung rödelt, obwohl an >sich überhaupt nichts zu tun ist. Wie kommst du darauf? Zwischen den Abfragen ist ein "Delay 3" [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 08:10 Uhr Solar Posts: 3680 Nutzer |
Zitat: Für den Spruch sind schon bessere Programmierer als Du an die Wand gestellt worden. [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 10:09 Uhr MaikG Posts: 5172 Nutzer |
>Für den Spruch sind schon bessere Programmierer als Du an die Wand gestellt worden. Mach dir keine Sorgen bevor ein 2.ter das Programm benutzen darf kommen noch eine Menge tests. Bis jetzt gibts keine Probleme und das schon nach einen haufen von Tests. [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 10:15 Uhr Solar Posts: 3680 Nutzer |
Schade. Du hast nicht verstanden. [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 12:47 Uhr MaikG Posts: 5172 Nutzer |
Drück dich deutlicher aus :-) Aber ich sag mal was auf mehrenen Amigas ohne Hits läuft, ggf. sogar auf OS4 hat selten schwere Fehler... [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 13:17 Uhr Solar Posts: 3680 Nutzer |
Zitat: Gerade im Bereich Multitasking / Multithreading / Inter-Prozeß-Kommunikation sind "läuft ohne Hits" oder "läuft auf mehreren Amigas" keine Anhaltspunkte für die Korrektheit einer Lösung. Sagen Dir "Race Condition" und "nicht reproduzierbarer Fehler" etwas? Die fiesen kleinen Dinger, die immer nur bei anderen auftreten? Denen kommt man nur bei, wenn man sich auch mit Theorie und Dokumentation auseinandersetzt - und wenn man Hinweise wie den von Holger nicht mit einem "läuft aber" zurückweist. [ Dieser Beitrag wurde von Solar am 29.02.2008 um 13:18 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 14:10 Uhr MaikG Posts: 5172 Nutzer |
>Sagen Dir "Race Condition" und "nicht reproduzierbarer Fehler" etwas? Ja. >Die fiesen kleinen Dinger, die immer nur bei anderen auftreten? >Denen kommt man nur bei, wenn man sich auch mit Theorie und >Dokumentation auseinandersetzt - und wenn man Hinweise wie den >von Holger nicht mit einem "läuft aber" zurückweist. Ich weise nicht zurück. Problem ist einfach, von dem was Holger meint habe ich keine ahnung. Von dem was ich stattdessen gemacht habe, habe ich Ahnung. D.h. es wird zu 99,9% jetzt keinen Fehler geben, im gegensatz dazu sind fehler bei sachen die ich noch nie gemacht habe wesentlich höher. [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 15:38 Uhr Solar Posts: 3680 Nutzer |
Zitat: An Deiner Stelle wäre das für mich ein exzellenter Grund, mich mal mit dem auseinanderzusetzen, was Holger meint... [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 17:49 Uhr MaikG Posts: 5172 Nutzer |
Hab aber kein Buch zum Thema. [ - Antworten - Zitieren - Direktlink - ] |
29.02.2008, 22:33 Uhr MaikG Posts: 5172 Nutzer |
Das beispiel von Ralf hab ich mir ausgedruckt. Gut, aber Open ist das Problem nicht Read oder Write. Ein ACTION_OPEN gibt es nicht und TCP:#? werde ich wohl nicht Locken können... [ - Antworten - Zitieren - Direktlink - ] |
03.03.2008, 17:14 Uhr Holger Posts: 8116 Nutzer |
Zitat:Warum solltest Du auch "#?" locken? Was soll das bringen? Dass es ein Packet zum Öffnen einer Datei geben muss, beweißt ja schon die Tatsache, dass man mittels AmigaDOS Dateien öffnen kann, oder? Es gibt sogar drei: Im Falle einer TCP-Verbindung, in die sowohl gelesen, als auch geschrieben werden soll, ist wohl ACTION_FINDUPDATE die richtige Wahl. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.03.2008, 17:52 Uhr MaikG Posts: 5172 Nutzer |
Mist jetzt hab ichs schon auf bsdsocked umgestellt... [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > AsyncIO ? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |