amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Amiga Tasks [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

06.07.2002, 17:44 Uhr

Flash
Posts: 249
Nutzer
Wie arbeitet man mit Tasks?

Wie kann ich z.B. aus einem Programm ein Task starten und mit diesem
Daten austauschen?


Das Thema interessiert mich schon seit längeren aber irgendwie
fehlt die passende Lektüre und der richtige Anstoss.

Also all Ihr Profis rückt mal was raus:lickout:.


Währe auch nett hier mal so eine Art Workshop über die Amigaspezifische
programmierung zu starten.





Flash:bounce:

[ - Antworten - Zitieren - Direktlink - ]

06.07.2002, 21:47 Uhr

Kronos
Posts: 1168
Nutzer
1. Willst du einen zweiten Task erzeugen, ohne das du eine zweite
Programm-Datei hast, oder nur ein anderes Programm starten.
Im zweiten Fall kannst du ja mal ein oder zwei Threads tiefer schauen.

2.Daten austauschen kannst du mittels exec-messages, AREXX (basiert
auf messages) oder mit Hilfe der semaphoren, solltest du vielleicht
ein wenig präzisieren.

Als Lektüre kann man da nur die entsprechended Teile des Amiga-Interns,
der RKRM und die DEV-CDs empfehlen.


MfG
Kronos
--

Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

07.07.2002, 10:05 Uhr

thomas
Posts: 7716
Nutzer

Am einfachsten geht das mit CreateNewProc() und NP_Entry. Damit kannst du einfach eine Unterroutine deines Programms als Task starten. Wenn das Unterprogramm zuende geht, wird der Task automatisch beendet. Was man dabei beachten muß, steht in den Autodocs. Am wichtigsten ist natürlich, daß der Task beendet wird, bevor das Hauptprogramm zuende geht und den Speicher freigibt.

Kommunikation über Messages. Mit CreatePort() einen MsgPort anlegen, mit WaitPort() auf Messages warten und mit GetMsg() die Messages abholen. Das Hauptprogramm kann dann mit FindPort() den Port suchen und mit SendMsg() die Messages abschicken. Wie die Kommunikation läuft, steht in den RKRMs. Vor allem, ob ReplyMsg() notwendig ist und wer den Speicher der Message freigibt, sollte vorher geklärt sein.

Alle notwendigen Informationen findest du auf der Amiga Developer CD (das ist nur eine, keine "CDs").

Gruß Thomas

--
Email: thomas-rapp@web.de

Home: home.t-online.de/home/thomas-rapp/


[ - Antworten - Zitieren - Direktlink - ]

07.07.2002, 11:29 Uhr

Kronos
Posts: 1168
Nutzer
Zitat:
Original von thomas:
(das ist nur eine, keine "CDs").



Von der es aber mehrere Versionen gibt :rotate:
--

Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

07.07.2002, 17:13 Uhr

Flash
Posts: 249
Nutzer
Also ich würde gerne einen zweiten Task im Program starten.

Wie muß ich mir das vorstellen?

Funktioniert das so wie eine Funktion die im Hintergrund abläuft?

Wenn ich z.B. ein Programm habe in dem eine Zeit abläuft und diese
Anzeige sekündlich aktualiesiert werden soll, kann man dies über
einen zweiten Task erledigen oder wie wird sowas programmiert?

:bounce: Flash :boing:

[ - Antworten - Zitieren - Direktlink - ]

07.07.2002, 17:38 Uhr

thomas
Posts: 7716
Nutzer

Für eine einfache Uhr brauchst du keinen zweiten Task, du wartest einfach immer eine Sekunde und malst die Uhr neu. Oder wenn du noch andere Sachen in dem Fenster machst, läßt du dir einfach IDCMP_INTUITICKS schicken, die kommen zehnmal in der Sekunde.

Gruß Thomas

--
Email: thomas-rapp@web.de

Home: home.t-online.de/home/thomas-rapp/


[ - Antworten - Zitieren - Direktlink - ]

08.07.2002, 17:10 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Flash:
Also ich würde gerne einen zweiten Task im Program starten.

Wie muß ich mir das vorstellen?

Funktioniert das so wie eine Funktion die im Hintergrund abläuft?

Wenn ich z.B. ein Programm habe in dem eine Zeit abläuft und diese
Anzeige sekündlich aktualiesiert werden soll, kann man dies über
einen zweiten Task erledigen oder wie wird sowas programmiert?


Die meisten Programme, insb. mit GUI arbeiten meist ereignisgesteuert. Das heisst, im Hauptprogramm laeuft eine Schleife, die mit WaitPort() auf eingehende Nachrichten wartet, diese mit GetMsg() abholt, abarbeitet und mit ReplyMsg() beantwortet.
Aufgaben, wie das Aktualisieren von Animationen oder Uhren etc. koennen damit genauso bearbeitet werden, wie thomas schon gesagt hat. Kritisch wird es nur, wenn laengere Operationen ausgefuehrt werden, weil dann auch das GUI nicht aktualisiert wird.
Dann lohnt es sich, die Operation in einem zweiten Task auszufuehren. Das kann man sich durchaus als Funktion, die im Hintergrund laeuft, vorstellen. Allerdings muss man beachten, dass das Hauptprogramm nicht vor dem Unterprogramm beendet werden darf und die Operation nicht mehrfach gestartet werden sollte, also evtl. die entsprechenden Menuepunkte waehrend der Ausfuehrung disabled sein sollten.

mfg

--

Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

13.07.2002, 15:02 Uhr

Flash
Posts: 249
Nutzer
Kann man nicht mal ein Demo bekommen in dem aus einem Programm
zwei Tasks laufen die dann sekündlich eine Meldung an das Programm
liefern.

Würde mir sehr helfen.

:bounce: Flash :boing:

[ - Antworten - Zitieren - Direktlink - ]

13.07.2002, 17:31 Uhr

thomas
Posts: 7716
Nutzer

Versuch's mal hiermit: http://home.t-online.de/home/thomas-rapp/download/multi.c


Gruß Thomas

--
Email: thomas-rapp@web.de

Home: home.t-online.de/home/thomas-rapp/


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Amiga Tasks [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.