Comment créer des threads sur Amiga ?

8 sujets de 16 à 23 (sur un total de 23)

  • 1
  • 2
  • crisot

    • Messages : 1436
    #137251

    Délire. Je me suis cogné ce code récement pour mon triple buffer :-)

    cclecle

    • Messages : 338
    #137252

    @Gilloo:

    merci pour l’éclaircissement fort utile ! Mais tu ne voulais pas plutot dire que mon compilo a des int sur 16bits plutot que les 32bit attendu par la pile ?

    A600 + 604n + RTC + Vampire V2 600, Coffin R54 / wb3.1.4.1
    A1200 + Vampire V2 1200, wb3.1.4.1

    cclecle

    • Messages : 338
    #137253

    Comment puis-je faire pour passer des arguments à un process lors de sa creation ?

    J’ai bien vu qu’il existe la fonction ReadArgs et le tag NP_Arguments mais j’ai du mal à en cerner le fonctionnement !

    Merci

    PS: désolé pour le double-post mais sa me parait « justifié »

    A600 + 604n + RTC + Vampire V2 600, Coffin R54 / wb3.1.4.1
    A1200 + Vampire V2 1200, wb3.1.4.1

    Mod

    Tcheko

    • Messages : 1022
    #137254

    Salut,

    Grosso modo…

    Côté pere :

    struct MonMessage

    {

    struct Message msg;

    LONG dataapasseraufils;

    };

    message = AllocVec(sizeof(struct MonMessage), MEMF_CLEAR|MEMF_PUBLIC);

    if(message)

    {

    message->msg.champ à initialiser (voir doc)

    /*forbid/permit obligatoire. le fils peut ne plus exister entre findport et putmsg */

    Forbid();

    if(portdufils = FindPort(« Nomduportdufile »)) != NULL)

    {

    PutMsg(portdufils, messagedupere);

    }

    Permit();

    }

    Côté fils :

    Ajouter un port avec un nom.

    Wait(portdufils);

    /* plusieurs messages peuvent attendre sur un signal */

    While(msg = GetMsg(portdufils))

    {

    … traiter le message

    /* choisir qui libère la ressource du message, soit le fils (cas: pas de réponse au père) soit le père, on renvoie le message */

    FreeVec(msg);

    OU

    ReplyMsg(msg); /* (et c’est le père qui nettoie */

    }

    http://www.cunningham-lee.com/misc/amiga_exec.html

    http://gega.homelinux.net/AmigaDevDocs/lib_24.html

    http://aminet.net/search?query=thread

    corto

    • Messages : 1129
    #137255

    Apparemment, tu passes une chaîne avec NP_Arguments et depuis ton process fils, tu utilises :

    STRPTR ptr = GetArgStr(VOID);

    Je n’ai pas essayé … Mais c’est marrant, j’ai moi aussi joué avec CreateNewProc tout mon dimanche !

    cclecle

    • Messages : 338
    #137256

    @Tcheko :

    Merci mais étant donné que je veut faire un tableau de process dans mon main et instancier plusieurs fois la fonction (une instance par process), le message n’est pas valable car chaque port de message aura le même nom pour chaque process.

    C’est justement pour cela que je veut passer un argument au démarrage du process, pour lui passer sont numéro !


    @corto
    :

    Merci, je vais expérimenter sa ce soi, sa me semble être la meilleur solution !

    Vivement un support du multiprocesseur sur un OS amiga !

    A600 + 604n + RTC + Vampire V2 600, Coffin R54 / wb3.1.4.1
    A1200 + Vampire V2 1200, wb3.1.4.1

    henes

    • Messages : 2618
    #137257

    Regarde plutôt le champ/tag « userdata » qui est là pour passer des infos (l’adresse d’une structure, par ex) du père au fils lors de la création de ce dernier.

    Nul besoin de port public venant polluer l’espace de nom ou autre horreur :)

    Gilloo

    • Messages : 831
    #137258

    je plussoie Hennes!

    car faire simple, c’est compliqué.

8 sujets de 16 à 23 (sur un total de 23)

  • 1
  • 2
  • Vous devez être connecté pour répondre à ce sujet.

Forums AmigaOS, MorphOS et AROS Développement Comment créer des threads sur Amiga ?

Amiga Impact