IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Préemptif, Win16Mutex, Thunk. Au secours !


Sujet :

Windows

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut Préemptif, Win16Mutex, Thunk. Au secours !
    Bonjour,

    J'ai récupéré un vieux bouquin (époque Windows 95) qui explique et commente
    l'écriture d'une DLL fournissant toutes les fonctions nécessaires a une
    application MIDI, (playback, enregistrement, synchro etc...).
    Mon but serait de réécrire cette DLL mais en y apportant diverses modifications.
    Mais avant tout je veux comprendre les principes de base et là je commence
    à pédaler sérieusement dans la semoule d'autant plus que le bouquin est en angliche ce qui n'arrange pas les choses.

    En gros, cette DLL gére tout ce qui a attrait au MIDI en faisant appel au fonctions multimedia low level de l'API Windows contenues dans mmsystem.dll.

    Là où ça se complique c'est que le bouquin propose en fait de faire
    2 DLLs identiques, sauf que l'une est en 32 bit et l'autre en 16 bit.
    Lorsque l'appli MIDI (32 bit) appel une fonction de la 1ere DLL (en 32 bit),
    celle ci appel la fonction correspondante dans la 2eme DLL (16 bit)
    via un "thunk".
    L'intérêt de tout ce bazard ?
    Utiliser le Win16Mutex qui permet à du code 16 bit de s'exécuter dans un
    environnement 32 bit et d'échapper à l'aspect préemptif de Windows 95.
    Toujours d'aprés le livre, le pb avec le préemptif c'est que, en gros, c'est Windows qui décide quand exécuter un thread. Donc, si un timer (dans une fonction de synchro par ex) demande à une fonction callback de s'exécuter toutes les 10 milisec, avec le préemptif c'est pas gagné.

    1) Est ce que ces explications sont toujours valables avec win 98, Millenium, NT, XP, ou est ce que la donne a changé depuis ?

    2) Si c'est malheureusement toujours pareil quelqu'un pourrait-il m'expliquer comment "thunker" d'une DLL à une autre et qu'est ce qu'un "thunk" exactement ?

    Un grand merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Donc en fait, tu as une DLL 32bits qui est un wrapper vers une DLL Win16.
    À mon avis, cela marchait aussi sous Windows 98 et ME, mais ne marchera pas (à mon humble avis, je peux me tromper) sous NT, 2000, XP ou Vista: Il me semble que les Windows de la famille NT ne permettent pas de mélanger du code 16 et 32 bits dans le même processus...

    Surtout qu'à mon avis, ta DLL 16 bits utilise des fonctions qui sous les OS modernes, sont réservées aux drivers...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Donc en fait, tu as une DLL 32bits qui est un wrapper vers une DLL Win16.
    Oui, en gros c'est ça.
    Surtout qu'à mon avis, ta DLL 16 bits utilise des fonctions qui sous les OS modernes, sont réservées aux drivers...
    Bah non. La DLL utilise toutes les fonctions qui a trait au MIDI (midiInOpen, midiOutShortMsg etc...) et ces fonctions sont parfaitement utilisables par une DLL ou même par une simple application.
    Il me semble que les Windows de la famille NT ne permettent pas de mélanger du code 16 et 32 bits dans le même processus
    A la limite moi ça m'arrange de tout écrire en 32 bit mais qu'en est-il de la rapidité et de la précision lorsqu'on utilise ce genre de fonctions sous Win XP ?
    Est ce que le préemptif vient mettre sa pagaille ou est ce que les DLLs
    mmsystem et winmm on été réécrites pour fonctionner comme il faut en 32 bit ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Au niveau de la rapidité, sur un système 32 bits des calculs 16 bits peuvent carrément être plus lents que des calculs 32 bits.

    Pour le reste, je ne peux pas te dire: Je ne connais pas assez les fonctionnalités MIDI de Windows.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci pour tes réponses.

    Effectivement ce genre de sujet est assez peu abordé et il
    faut vraiment fouiner pour trouver des bribes de réponses.

    J'ai quand même trouvé sur un obscure forum (en angliche again) des réponses à mes questions.
    Pour ceux que ça interesse voici en gros ce que j'en ai retenu:

    1) Le truc du "thunk" est en fait une espèce de hack qui permet, sous win95/98/ME, de contourner l'aspect préemptif et d'avoir une gestion de threads à la Windows 3.1.

    Quoiqu'il en soit Win NT/XP ne permettent plus ce genre de manip, et le thunk n'est plus possible.

    L'inspecteur Harry a dû passer par là: "Come on thunk make my day !"

    2) Et l'autre bonne nouvelle c'est qu'apparement sous Win NT/XP la précision et la rapidité sont suffisamment bonnes pour ne pas avoir recours à des manips tordues comme le thunking.
    On pourrait donc utiliser les fonctions MIDI tel quel.

    Je suis toutefois preneur de toutes nouvelles informations complémentaires sur le sujet.

Discussions similaires

  1. [FLASH MX 2004]lissage au secour
    Par livingdead dans le forum Flash
    Réponses: 8
    Dernier message: 28/06/2004, 16h41
  2. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  3. postgresql sous cygwin Au secours!!!!,
    Par careme dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/11/2003, 17h21
  4. Disquette de secours sans Lilo ni Grub sur la partition ?
    Par Blue_Angelica dans le forum Administration système
    Réponses: 3
    Dernier message: 13/11/2003, 15h59
  5. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo