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

WinDev Discussion :

IHM Thread PostMessage GPF [WD16]


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut IHM Thread PostMessage GPF
    Bonjour à tous, c'est encore moi

    Je viens vers vous pour un problème de manipulation d'IHM à travers un thread. Je sais bien que c'est déconseillé de manipuler directement des champs dans un thread secondaire, j'ai donc voulu mettre en place des événements pour demander au thread principale de manipuler les champs.

    Le but étant d'alimenter toutes les 10ms des jauges affichant le volume sonore (statique et dynamique) à un instant T d'un morceau de musique par le biais de bass.dll.

    Je déclare donc mes événements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Evénement(GENERAL_Jauge_Level, "*.*", "Jauge_Level")
    Evénement(GENERAL_Jauge_Peak, "*.*", "Jauge_Peak")
    Les 2 procédures locales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE GENERAL_Jauge_Level(nParam est un entier, Level est un entier)
     
    JAUGE_Volume_Gauche_R1 = Level
     
    PROCEDURE GENERAL_Jauge_Peak(nParam est un entier, Peak est un entier)
     
    JAUGE_Crete_Gauche_R1 = Peak
    La procédure du thread secondaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    PROCEDURE Record_Deroulement(Stream est un entier)
     
    Level est un entier
    Peak est un entier
    Memo_Level est un entier
     
    BOUCLE
    	SI Stream <> 0 ALORS
    		// LEVEL
    		Level = Max(PoidsFaible(BASS_ChannelGetLevel(Stream)), PoidsFort(BASS_ChannelGetLevel(Stream)))
     
    		// PEAK LEVEL
    		SI Level > Memo_Level ALORS
    			Peak = Level
    		FIN
     
    		Memo_Level = Level
     
    		PostMessage(Handle(FEN_Enregistreur), "Jauge_Level", Level, Level)
    		PostMessage(Handle(FEN_Enregistreur), "Jauge_Peak", Peak, Peak)
    	FIN
     
    	ThreadPause(10)
    FIN
    Ai-je mal codé quelques choses ? Car systématiquement, au bout de quelques minutes, j'ai le droit à un jolie Access Violation GPF Alors que le but est d'éviter ça !

    Et je ne sais pas vraiment d'où peut venir le problème car j'ai pour erreur "Pile invalide" donc pas de ligne de code précisée... Mais le thread fonctionne parfaitement sans les PostMessage :s

    J'ai tous ses messages dans l'observateur d’événements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    Récipient d’erreurs INVALID_REQUEST, type 0
    Nom d’événement*: Crash PCS EXE
    Réponse*: Non disponible
    ID de CAB : 0
     
    Signature du problème : 
    P1 : 
    P2 : 
    P3 : 
    P4 : 
    P5 : 
    P6 : 
    P7 : 
    P8 : 
    P9 : 
    P10 : 
     
    Fichiers joints*:
    C:\Users\Kyle\AppData\Local\Temp\CXEE3C8.tmp.txt
     
    Ces fichiers sont peut-être disponibles ici*:
    C:\Users\Kyle\AppData\Local\Microsoft\Windows\WER\ReportArchive\Critical_0_0_00000000_1425e84c
     
    Symbole d’analyse : 
    Nouvelle recherche de la solution : 0
    ID de rapport : 35a10249-4d9f-11e4-8271-90e6ba564153
    Statut du rapport : 0
    Récipient avec hachage*: 
     
     
     
    Nom de l’application défaillante wdtst.exe, version : 16.0.12.0, horodatage : 0x4d7a166c
    Nom du module défaillant : KERNELBASE.dll, version : 6.3.9600.17278, horodatage : 0x53eeb460
    Code d’exception : 0xe06d7363
    Décalage d’erreur : 0x00012f71
    ID du processus défaillant : 0xf48
    Heure de début de l’application défaillante : 0x01cfe1a975adcf5a
    Chemin d’accès de l’application défaillante : C:\WinDev 16\Programmes\wdtst.exe
    Chemin d’accès du module défaillant: C:\Windows\SYSTEM32\KERNELBASE.dll
    ID de rapport : 37b01d4a-4d9f-11e4-8271-90e6ba564153
    Nom complet du package défaillant*: 
    ID de l’application relative au package défaillant*: 
     
     
    Récipient d’erreurs , type 0
    Nom d’événement*: Crash PCS EXE
    Réponse*: Non disponible
    ID de CAB : 0
     
    Signature du problème : 
    P1 : 
    P2 : 
    P3 : 
    P4 : 
    P5 : 
    P6 : 
    P7 : 
    P8 : 
    P9 : 
    P10 : 
     
    Fichiers joints*:
    C:\Users\Kyle\AppData\Local\Temp\CXEE3C8.tmp.txt
     
    Ces fichiers sont peut-être disponibles ici*:
     
     
    Symbole d’analyse : 
    Nouvelle recherche de la solution : 0
    ID de rapport : 35a10249-4d9f-11e4-8271-90e6ba564153
    Statut du rapport : 262144
    Récipient avec hachage*: 
     
     
     
    Récipient d’erreurs 73566500776, type 1
    Nom d’événement*: APPCRASH
    Réponse*: Non disponible
    ID de CAB : 0
     
    Signature du problème : 
    P1 : wdtst.exe
    P2 : 16.0.12.0
    P3 : 4d7a166c
    P4 : KERNELBASE.dll
    P5 : 6.3.9600.17278
    P6 : 53eeb460
    P7 : e06d7363
    P8 : 00012f71
    P9 : 
    P10 : 
     
    Fichiers joints*:
    C:\Users\Kyle\AppData\Local\Temp\WERF607.tmp.WERDataCollectionFailure.txt
     
    Ces fichiers sont peut-être disponibles ici*:
    C:\Users\Kyle\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_wdtst.exe_5d8a5260415c6d507af672aea9eaf6b691b15866_83af85fe_0db9f607
     
    Symbole d’analyse : 
    Nouvelle recherche de la solution : 0
    ID de rapport : 37b01d4a-4d9f-11e4-8271-90e6ba564153
    Statut du rapport : 4104
    Récipient avec hachage*: 441e3ca4b61bf17a6468a6d09befcdd7
     
     
     
     
    Récipient d’erreurs , type 0
    Nom d’événement*: APPCRASH
    Réponse*: Non disponible
    ID de CAB : 0
     
    Signature du problème : 
    P1 : wdtst.exe
    P2 : 16.0.12.0
    P3 : 4d7a166c
    P4 : KERNELBASE.dll
    P5 : 6.3.9600.17278
    P6 : 53eeb460
    P7 : e06d7363
    P8 : 00012f71
    P9 : 
    P10 : 
     
    Fichiers joints*:
     
    Ces fichiers sont peut-être disponibles ici*:
    C:\Users\Kyle\AppData\Local\Microsoft\Windows\WER\ReportQueue\AppCrash_wdtst.exe_5d8a5260415c6d507af672aea9eaf6b691b15866_83af85fe_0351f27d
     
    Symbole d’analyse : 
    Nouvelle recherche de la solution : 0
    ID de rapport : 37b01d4a-4d9f-11e4-8271-90e6ba564153
    Statut du rapport : 4100
    Récipient avec hachage*:
    Merci.

  2. #2
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    (pas de moi)
    - premier conseil : utilises des entiers systèmes
    - Une chose à corriger dans le prototypage des procédures d'évènement : il manque le paramètre MessageWindows.
    cf Aide : Procédure appelée par la fonction Evénement
    En conséquence tu adresses à un moment donné un message non géré par ton handle.

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par R&B Voir le message
    (pas de moi)
    - premier conseil : utilises des entiers systèmes
    - Une chose à corriger dans le prototypage des procédures d'évènement : il manque le paramètre MessageWindows.
    cf Aide : Procédure appelée par la fonction Evénement
    En conséquence tu adresses à un moment donné un message non géré par ton handle.
    - Ok pour les entiers systèmes, donc dans les procédures c'est bien ça ?

    - Pour le paramêtre MessageWindows, il y est bien : Jauge_Level. Je ne peux pas mettre de message Windows comme survol click etc... ?!

    J'ai suivi cette aide : http://doc.pcsoft.fr/fr-FR/?3077015&...ead_secondaire

    Merci

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Le paramètre MessageWindows manque à la fonction GENERAL_Jauge_Level.
    Il faut qu'elle prenne 3 paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PROCEDURE GENERAL_Jauge_Level(nMsg <utile>, wParam <utile>, lParam <utile>)
    JAUGE_Volume_Gauche_R1 = lParam
    Même chose pour GENERAL_Jauge_Peak.

    L'usage de chaînes pour les messages n'est pas recommandé dans le cas d'un usage interne à l'application, en tout cas, si ça provoque bien un RegisterWindowMessage.
    Vous pouvez utiliser un numéro de message entre WM_USER + 1201 et 0x7FFF, donc entre 2225 et 32767.

  5. #5
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Ah d'accord, c'est pour ça cette erreur au bout d'un certain temps ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Le paramètre n°3 n'a pas de valeur par défaut et n'a pas reçu de valeur.
     
    ----- Informations techniques -----
     
    Projet : xxx
     
    Que s'est-il passé ?
    Le paramètre n°3 n'a pas de valeur par défaut et n'a pas reçu de valeur.
     
    Code erreur : 1083
    Niveau : erreur fatale (EL_FATAL)
     
    Dump de l'erreur du module 'WD160VM.DLL' (16.0.150.6).
    Identifiant des informations détaillées (.err) : 1083
    Informations de débogage :
    Erreur hors exécution
    Merci

    EDIT : Sur un autre forum, on m'as conseillé de placer un Multitâche(-1) dans chaque procédure pour redonner la main à l'application et Windows. Ça l'air d'améliorer

  6. #6
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par Hibernatus34 Voir le message
    L'usage de chaînes pour les messages n'est pas recommandé dans le cas d'un usage interne à l'application, en tout cas, si ça provoque bien un RegisterWindowMessage.
    Vous pouvez utiliser un numéro de message entre WM_USER + 1201 et 0x7FFF, donc entre 2225 et 32767.
    D'accord, donc je dois utiliser donc WM_USER + 1300 par exemple à la plage de "Jauge_Level" ?

    Merci

    EDIT : J'ai codé ceci, ça vous pense correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CONSTANTE	
    	WM_USER = 0x0400
    FIN
     
    Evénement(GENERAL_Jauge_Level, "*.*", WM_USER + 1300)
    Evénement(GENERAL_Jauge_Peak, "*.*", WM_USER + 1400)
    Merci

  7. #7
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    J'ai beau avoir mis les 3 parametres, j'ai toujours cette erreur au bout d'un moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Le paramètre n°3 n'a pas de valeur par défaut et n'a pas reçu de valeur.
     
    ----- Informations techniques -----
     
    Projet : XXX
     
    Que s'est-il passé ?
    Le paramètre n°3 n'a pas de valeur par défaut et n'a pas reçu de valeur.
     
    Code erreur : 1083
    Niveau : erreur fatale (EL_FATAL)
     
    Dump de l'erreur du module 'WD160VM.DLL' (16.0.150.6).
    Identifiant des informations détaillées (.err) : 1083
    Informations de débogage :
    Erreur hors exécution

  8. #8
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Pourquoi ne pas écrire ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONSTANT
        WM_USER = 0x400
        UM_JaugePeak = WM_USER + 1200 + 1
        UM_JaugeLevel = WM_USER + 1200 + 2
    FIN
    Ensuite, vous devez écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Evénement(GENERAL_Jauge_Level, MaFenêtre..Nom, UM_JaugePeak)
    Evénement(GENERAL_Jauge_Level, MaFenêtre..Nom, UM_JaugeLevel)
    Mémorisez le Handle de la fenêtre à l'appel du thread (passez le en paramètre du thread).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE Record_Deroulement(LOCAL Stream est un entier, LOCAL Hwnd est entier système)
    ...
    PostMessage(Hwnd, UM_JaugeLevel, 42, 51)

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 21
    Points : 61
    Points
    61
    Par défaut ExécuteThreadPrincipal
    Bonjour,

    ExécuteThreadPrincipal est très pratique pour faire ce genre de choses..
    Existe dans Windev 17 mais dans la 16... je ne sais pas.

    Cordialement
    Dominique D.

  10. #10
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    @Hibernatus34 :

    Cela change vraiment quelque-choses MaFenêtre..Nom à la place de "*.*" ?
    Et pourquoi passer le handle à la procédure ?

    Merci Hibernatus34

    @ddom76 :

    Merci mais sous WD16, cette fonction n'existe pas

  11. #11
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    "*.*" signifie qu'on reçoit les messages pour toutes les fenêtres, tous les champs.
    Votre code n'est pas compatible avec ça, car il dépend du contexte de la fenêtre. C'est moins propre, car même si c'est très improbable, une autre fonction pourrait envoyer le même numéro de message à d'autres champs/fenêtres pour d'autres raisons.

    Ensuite, pour le handle, c'est parce qu'il est plus propre également de ne pas compter sur l'existence d'une fenêtre dans un thread. Si le thread n'est pas coupé à la fermeture de la fenêtre, il va planter en cherchant son Handle. Alors qu'utiliser un handle obsolète est inoffensif.
    Et puis une fenêtre peut avoir des alias (création sous un autre nom que le nom éditeur).

    C'est des bonnes habitudes à prendre, je ne dis pas que votre appli pouvait planter à cause de ces choses.

  12. #12
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Je rejoins Hibernatus sur la porté de l'évènement déclaré : nom de la fenêtre = juste la fenêtre (même pas ses champs), toute autre portée n'est pas appropriée.
    Dominique a raison sur la fonction WLanguage pour les threads... dommage qu'elle arrive un peu tard

    En tout cas, mrci à tous pour ce fil qui m'a aussi permis aussi de mettre en place un échange d'informations entre fenêtres par message. C'est une alternative de qualité indéniable à l'appel d'une procédure de l'autre fenêtre.

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 939
    Points : 9 251
    Points
    9 251
    Par défaut
    Hello,

    WDKyle tu as écrit :
    Le but étant d'alimenter toutes les 10ms des jauges affichant le volume sonore (statique et dynamique) à un instant T d'un morceau de musique par le biais de bass.dll.
    Je n'ai peut-être pas lu toute la discussion mais pourquoi veux-tu alimenter des jauges (effet visuel) toutes les 10ms ? Cela me paraît excessif et les messages windows vont avoir du mal à s'écouler à cette vitesse. Toutes les 50 ms me paraît largement suffisant.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #14
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Salut,

    50ms c'est trop peu pour moi. Je me suis fixé à 10ms au lieu de 5ms déjà lol

  15. #15
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    L'oeil humain ne voit-il pas 25 images secondes... soit une fréquence de 40ms.
    La fréquence de 40 ms est donc la limite perceptible. Au delà on est dans le subliminal.
    Ptêt que Kyle va ajouter un libellé à la jauge...
    ou ce programme est destiné pour des non humains

  16. #16
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je dois être sûr-humain, car je n'ai pas la même perception avec une jauge alimentée toutes les 10ms et une alimentée toutes les 40ms. C'est bien plus fluide.

  17. #17
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 939
    Points : 9 251
    Points
    9 251
    Par défaut
    Il y a quand même quelque chose d'étrange

    Ta jauge est de quel type ?
    Quel est le code qui transforme les données BASS en valeur pour la jauge ?

    As tu une vidéo à 1000 images secondes de ta jauge en action à 40ms et 10ms ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  18. #18
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Voici la video http://radioutility.fr/dl/Untitled.mp4

    Première partie en 10ms et seconde en 40ms, c'est très net le changement !

    Je reviens sur la fréquence limite perceptible de 40ms... En gros, R&B tu ne peut voir que 3 images par secondes toi ? 1 image à 0ms + 2 à 40ms + 3 à 80ms...

    Si l’œil peut voir 25 images par secondes avec mes 10 mises à jour de jauge par secondes je suis encore large

  19. #19
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 939
    Points : 9 251
    Points
    9 251
    Par défaut
    Il doit y avoir un problème dans ton code la vitesse de déplacement de la jauge ne correspond pas à la fréquence à laquelle elle devrait se déplacer si sa valeur changeait toutes les 40ms


    je remue le couteau dans la plaie mais voici la vidéo de ce qu'on pouvait faire avec Naudio dans windev :
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  20. #20
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je viens de m'apercevoir que je met "ms" mais je parle de "cs" depuis le début pfff... Vivement les vacances !

    Donc une mise à jour toutes les 10 centièmes de secondes.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Thread/Mise a jour d'IHM
    Par davids75014 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 04/06/2007, 15h44
  2. [java][IHM] bloquage de fenetre + thread(?)
    Par vince3320 dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 13/02/2007, 16h32
  3. PostMessage et fin de thread
    Par titoine1978 dans le forum MFC
    Réponses: 8
    Dernier message: 26/05/2006, 23h50
  4. [VB.NET][VS2003] Threads et IHM
    Par toniolol dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/04/2006, 14h54
  5. [SWT]mise a jour ihm SWT par un thread
    Par will82 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 06/08/2004, 12h37

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