![]() |
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: 7719 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: Von der es aber mehrere Versionen gibt ![]() -- 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? ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
07.07.2002, 17:38 Uhr thomas Posts: 7719 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: 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. ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
13.07.2002, 17:31 Uhr thomas Posts: 7719 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-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |