DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > CreateTask/CreateProcess | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-11-06, 23:41 h ciVic Posts: 131 User |
Hallo! Ich möchte ähnlich wie unter Windows die Funktion CreateThread ein solchen Task erzeugen. Nun klingt das nach CreateTask, allerdings scheint Datei I/O komplett verboten zu sein... CreateProcess erzeugt aber wohl eher einen neuen Process, was unter OS4 wohl inkompatiblitäten erzeugt, da dieser in einem anderen Speicherbereich läuft, und Threads sollten ja alle auf dem selben Speicher zugreiffen. Also nochmal kurz mein Prob: der Task sollte 1. den gleichen Speicherbereich nutzen und 2. Disk I/O zulassen. Was kann ich da tun? ciVic [ - Answer - Quote - Direct link - ] |
2004-11-07, 00:19 h thomas Posts: 7718 User |
Wo hast du denn das mit den Speicherbereichen her ? Aus Sicht der exec.library sind Prozesse das gleiche wie Tasks. Ich wüßte nicht, daß sich bei OS4 da etwas dran geändert hat. Schau dir mal die Autodocs von CreateNewProc an, da wirst du sicher fündig. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-11-07, 01:00 h ciVic Posts: 131 User |
CreateProcess erzeugt also auch unter OS4 nicht einen Prozess, der seinen eigenen Speicher hat, und dieser neue Prozess kann auf den ganzen Speicher des Ezeugenden zugreiffen? Naja gut, aber leider weiß ich jetzt nicht, wie ich mit CreateProc einfach eine Funktion ausführen kann wie mit CreateTask ciVic [ - Answer - Quote - Direct link - ] |
2004-11-07, 01:03 h thomas Posts: 7718 User |
Ich sagte doch, schau die CreateNewProc an. CreateProc ist längst überholt. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-11-07, 02:53 h ciVic Posts: 131 User |
Jo hab es damit ausprobiert, ich kann wie bei CreateTask kein printf und keine Datei I/O nutzen. Hab ich vielleicht nen Tag vergessen? ciVic [ - Answer - Quote - Direct link - ] |
2004-11-07, 13:23 h ciVic Posts: 131 User |
Jo hab es damit ausprobiert, ich kann wie bei CreateTask kein printf und keine Datei I/O nutzen. Hab ich vielleicht nen Tag vergessen? ciVic [ - Answer - Quote - Direct link - ] |
2004-11-07, 15:31 h Holger Posts: 8116 User |
Zitat:NP_Output /* filehandle - default is Open("NIL:"...) */ Das sagt doch alles, oder? mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2004-11-07, 16:06 h ciVic Posts: 131 User |
Jo, dass ich genau eine Datei nutzen kann. Andere versuche mit fopen oder Open enden im ersten Fall im Absturz der betroffenen Disk und im zweiten mit einem kompletten Absturz ciVic [ - Answer - Quote - Direct link - ] |
2004-11-07, 16:25 h thomas Posts: 7718 User |
Du darfst keine ANSI-Funktionen benutzen, die sind nicht multitaskingfähig. Nimm die Funktionen der dos.library stattdessen: Printf, Open, Close, FRead, FWrite etc. malloc/free darfst du auch nicht benutzen. strcpy und Co. wiederum dürften ungefährlich sein. Alle Funktionen, die Daten statisch zwischenspeichern, funktionieren nicht in einer Multitasking-Umgebung. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-11-07, 17:45 h ciVic Posts: 131 User |
Also ich versuch es grad hiermit: void simpletask() { struct DosLibrary *DOSBase; char *libname="dos.library"; ULONG ver=37; DOSBase=(struct DosLibrary *)OpenLibrary(libname, ver); BPTR f=Open("ram:test3", MODE_NEWFILE); FWrite(f,(void *)"Hellon",6,1); Close(f); printf("Test2"); if (DOSBase) CloseLibrary((struct Library *)DOSBase); while(sharedvar < 0x8000000) sharedvar++; /* Wait forever because main() is going to RemTask() us */ Wait(0L); } Und das per CreateNewProc aufgerufen schmiert ab.printf geht in diesem Fall, da ich als Ausgabe beim Aufruf eine Datei in der Ramdisk gewählt habe. OpenLibrary soll laut Dok nicht das Prob sein. Nehme ich die drei Zeilen, die mit f umgehen raus geht es. tags[0].ti_Tag=NP_Entry; tags[0].ti_Data=(Tag)simpletask; tags[1].ti_Tag=NP_Name; tags[1].ti_Data=(Tag)"Testtask"; tags[2].ti_Tag=NP_Priority; tags[2].ti_Data=0; tags[3].ti_Tag=NP_StackSize; tags[3].ti_Data=4000; tags[4].ti_Tag=NP_Output; tags[4].ti_Data=Open("ram:test2", MODE_NEWFILE); tags[5].ti_Tag=TAG_DONE; Und das sind die Tags, die ich an CreateNewProc übergebe. ciVic [ Dieser Beitrag wurde von ciVic am 07.11.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-11-07, 19:18 h thomas Posts: 7718 User |
Benutzt du Small oder Large Data-Model ? Bei small mußt du die Funktion mit __saveds oder __geta4 oder geta4(), oder wie das bei deinem Compiler geht, deklarieren. Zitat: Solltest du nicht tun. Ein Process hat mehr Daten als eine Task, die werden bei RemTask() nicht freigegeben. Schau dir mal dieses Beispiel an, das funktioniert: 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 - ] |
2004-11-07, 23:46 h ciVic Posts: 131 User |
Ok danke an alle, hab den Fehler. Man muß beim g++ -noixemul verwenden... ciVic [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > CreateTask/CreateProcess | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |