amiga-news 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: 7717
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:
Original von MaikG:
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.

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. :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

26.02.2008, 21:00 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
Zitat:
Original von MaikG:
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.

In Basic?!
Niemals.


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:
Original von MaikG:
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.

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:
Original von Ralf27:
Jetzt mal interessenhalber: Wieso denn nicht? Was macht es denn von Basic aus unmöglich?

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: 7717
Nutzer
@MaikG:

Zitat:
it absolutely
' must not-ever call DOS


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:
Original von MaikG:
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.
'

...

>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...

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:
Oder halt ein 2. Basic Programm das man nur die Parameter
über gibt und mit RUN startet.

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:
Original von MaikG:
Man muss nicht zwangsweise über das System kommunizieren.

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:
Für mich ist es einfacher, weil davon verstehe ich was, von
Packets nicht.

Nein, von Inter-Task Kommunikation verstehst Du offensichtlich überhaupt nichts.
Zitat:
Ja, soweit hab ich das auch hinbekommen es laufen zur zeit 6 "Subtasks".
Allerdings gibts da noch ein paar probleme mit TCP:

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:
Original von MaikG:
Es läuft aber.

Zufall? ;)

Zitat:
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.

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:
Original von MaikG:

Es läuft aber.


Für den Spruch sind schon bessere Programmierer als Du an die Wand gestellt worden. I-)

[ - 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:
Original von MaikG:
Aber ich sag mal was auf mehrenen Amigas ohne Hits läuft,
ggf. sogar auf OS4 hat selten schwere Fehler...


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:
Original von MaikG:

Problem ist einfach, von dem was Holger meint habe ich keine ahnung. Von dem was ich stattdessen gemacht habe, habe ich Ahnung.


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:
Original von MaikG:
Ein

ACTION_OPEN

gibt es nicht und TCP:#? werde ich wohl nicht Locken können...

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:
  • ACTION_FINDINPUT
  • ACTION_FINDOUTPUT
  • ACTION_FINDUPDATE


    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.
    .