amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Amiga Tasks [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2002-07-06, 17:44 h

Flash
Posts: 249
User
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:

[ - Answer - Quote - Direct link - ]

2002-07-06, 21:47 h

Kronos
Posts: 1168
User
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

[ - Answer - Quote - Direct link - ]

2002-07-07, 10:05 h

thomas
Posts: 7718
User

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/


[ - Answer - Quote - Direct link - ]

2002-07-07, 11:29 h

Kronos
Posts: 1168
User
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

[ - Answer - Quote - Direct link - ]

2002-07-07, 17:13 h

Flash
Posts: 249
User
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:

[ - Answer - Quote - Direct link - ]

2002-07-07, 17:38 h

thomas
Posts: 7718
User

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/


[ - Answer - Quote - Direct link - ]

2002-07-08, 17:10 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2002-07-13, 15:02 h

Flash
Posts: 249
User
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:

[ - Answer - Quote - Direct link - ]

2002-07-13, 17:31 h

thomas
Posts: 7718
User

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/


[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Amiga Tasks [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.