| Tick_Count pour recherche de ralentissement | |
|
+5papydall The Gamer Klaus jimx78 silverman 9 participants |
Auteur | Message |
---|
silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Tick_Count pour recherche de ralentissement Mer 29 Avr 2015 - 22:00 | |
| Bonjour jack,
ce serait pratique d'intégrer la fonction "GetTickCount" du kernel32 pour rechercher les sources de ralentissements dans nos programmes, afin de mieux les optimiser. L'autre avantage c'est de garder "dll_on" disponible car on ne peux utiliser qu'une dll en continu. | |
|
| |
jimx78
Nombre de messages : 241 Age : 32 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: Tick_Count pour recherche de ralentissement Mer 29 Avr 2015 - 22:57 | |
| Pour moi, tu parle en chinois lol
Tu travail dans l'informatique ? | |
|
| |
Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tick_Count pour recherche de ralentissement Mer 29 Avr 2015 - 23:39 | |
| @Silverman: Je pourrais aisément rendre la fonction GetTickCount accessible dans KGF.dll. Mais je pense que ce n'est pas ce que tu cherchesn n'est-ce pas ? Tu veux garder une autre DLL ouverte et accéder à cette fonction en Panoramic pur... Si tel est le cas, je ne peux rien pour toi. Sinon - il suffit de demander... | |
|
| |
The Gamer
Nombre de messages : 110 Age : 30 Localisation : Toulouse (31) Date d'inscription : 11/05/2010
| Sujet: Re: Tick_Count pour recherche de ralentissement Mer 29 Avr 2015 - 23:56 | |
| Un peu Hors Sujet mais voici l'info qui répond a la question de Jim78 Tick CountTu es pas le seul inculte : moi aussi ! Je connaissais pas cette fonction DLL mais pourrait me servir pour mon code 3D (calcul FPS). Je referme la parenthèse. | |
|
| |
papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 1:50 | |
| Voici comment utiliser GetTickCount de la kernel32.dll. Je parle Panoramic, non Chinois! - Code:
-
' Déterminer le nombre de millisecondes écoulées depuis le démarrage du système. dim tick% dll_on "kernel32.dll" tick% = dll_call0("GetTickCount") message "Il s'est écoulé : " + str$(tick%) + " ms depuis le démarrage du PC"
Dernière édition par papydall le Jeu 30 Avr 2015 - 2:03, édité 1 fois | |
|
| |
papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 2:02 | |
| Voici une petite application de GetTickCount. - Code:
-
' Déterminer le temps en millisecondes pour effectuer un traitement quelconque. dim t1%,t2%,i,n dll_on "kernel32.dll" t1% = dll_call0("GetTickCount") ' Comme exemple : on va déterminer le temps mis pour faire une boucle for i = 1 to 10000 n = n + 1 next i t2% = dll_call0("GetTickCount") message "Le traitement de la boucle a nécessité un temps de : " + str$(t2%-t1%) + " ms"
| |
|
| |
Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Avr 2015 - 2:08 | |
| La question va peut être paraître idiote mais pourquoi vous ne vous servez pas de la fonction de kgf qui permet justement l' utilisation de plusieurs dlls ?.... | |
|
| |
Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 2:16 | |
| Très bonne question, Ygeronimi !
On ouvre KGF.dll avec DLL_ON - ce sera la seule DLL connue du programme.
Avec les fonctions appropriées, on "cible" une autre dll. Celle-ci sera ouverte à l'insu de Panoramic, mais parfaitement accessible.
Avec d'autres fonctions de KGF.dll, on "sélectionne" une fonction de l'autre DLL, puis on l'appelle avec ses paramètres.
Cette technique peut être utilisée pour accéder USER32.dll en même temps que KGF.dll, mais en réalité, cela s'applique à n'importe quelle DLL. | |
|
| |
papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 2:35 | |
| Je ne savais pas que KGF.DLL permet la gestion de plusieurs DLL. @ Klaus Et si tu nous crées une DLL contenant uniquement la fonction pour gérer plusieurs DLL. Ça s’appellera peut-être Multi_DLL.dll | |
|
| |
Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Avr 2015 - 2:35 | |
| Je le fais quand j' en ai besoin même si c' est rare. Dans le cas des jeux 3d cela peut s' avérer très utile. | |
|
| |
Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 2:53 | |
| Voici un code pour appeler GetTickCount à partir de KGF.dll. Pour la démo, j'essaie d'abord dans USER32.dll, je reconnais qu'elle n'y est pas, alors j'essaie avec Kernel32.dll, et là, ça marche. Cela montre les 4 phases: 1. chargement de la DLL 2. ciblage de la fonction 3. appel de la fonction 4. déchargement de la DLL Pour info: on peut ouvrir simultanément autant de DLLs qu'on veut, dans la limite de la mémoire disponible de l'ordinateur... Voici la démo: - Code:
-
' utilisation_USER32_par_KGF.bas
dim KGF$ : KGF$ = "KGF.dll" dim USER32$ : USER32$ = "C:\Windows\System32\USER32.dll" dim Kernel32$ : Kernel32$ = "C:\Windows\System32\Kernel32.dll" dim GetTickCount$ : GetTickCount$ = "GetTickCount"
dim res%, tickcount%, hnd_user32%, hnd_kernel32%
dll_on "KGF.dll"
' on charge USER32.dll hnd_user32% = dll_call1("LoadDLL",adr(USER32$))
' on cible la fonction GetTickCount dans USER32.dll (elle n'y est pas !) res% = dll_call2("TargetDLL",hnd_user32%,adr(GetTickCount$)) if res%=0 then message "Fonction "+GetTickCount$+" est inaccessible dans USER32.dll" ' on décharge la DLL res% = dll_call1("UnLoadDLL",hnd_user32%)
' on charge Kernel32.dll hnd_kernel32% = dll_call1("LoadDLL",adr(Kernel32$))
' on cible la fonction GetTickCount dans Kernel32.dll (elle y est !) res% = dll_call2("TargetDLL",hnd_kernel32%,adr(GetTickCount$)) if res%=0 message "Fonction "+GetTickCount$+" est inaccessible dans Kernel32.dll" ' on décharge la DLL else
' on appelle la fonction (elle n'a pas de paramètres) tickcount% = dll_call0("CallDLL0")
message "tickcount = "+str$(tickcount%) end_if
' on décharge la DLL res% = dll_call1("UnLoadDLL",hnd_kernel32%)
end
| |
|
| |
jimx78
Nombre de messages : 241 Age : 32 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 6:30 | |
| Merci, mais si je comprend bien, on peux utiliser s'une seul dll a la foi.
Si on fait notre jeu 3D, on utilise deja une dll avec la souris.
Edit : a non, une dll multi dll... | |
|
| |
Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 7:45 | |
| Très intéressant cette info sur ta DLL Klaus ! Je ne savais pas qu'il y avait une telle fonction dans KGF. Cela va me servir dans un programme ou je jongle avec plusieurs DLL. Merci. | |
|
| |
jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 9:28 | |
| | |
|
| |
Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 10:05 | |
| Merci, jean_debord ! Je réaffirme: 1. on peut charger simultanément autant de DLLs qu'on veut 2. pour cela, il suffit de les charger avec LoadDLL et de conserver la handle retournée dans une variable par DLL 3. avant d'utiliser une fonction d'une de ces DLLs chargées, il faut cibler la fonction par TargetDLL, en spécifiant le handle de la DLL choisie 4. on peut appeler ensuite la fonction ciblée par une des fonctions CallDLL0,...,CallDLL6 (en fonction du nombre de paramètres), et ce autant de fois qu'on veut 5. lorsqu'on veut appeler une autre fonction, il faut repasser par le point (3) 6. lorsqu'une DLL chargée n'est plus nécessaire, il faut la décharger par UnLoadDLL Voilà. C'est vrai - cela représente une certaine "gymnastique". Mais ça marche parfaitement, Panoramic n'y voit que du feu, et plusieurs DLLs peuvent être utilisées smultanément. | |
|
| |
papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 14:13 | |
| - Citation :
- C'est vrai - cela représente une certaine "gymnastique".
Quand on a bien compris comment doit-on s’y prendre,(et merci Klaus tu l’as très bien expliqué) la gymnastique deviendra une partie de plaisir : c’est du (re) confort ! | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 16:30 | |
| Bonjour, Je me suis permis de reprendre le programme de Klaus pour bien montrer que ce n'est pas une DLL après l'autre... - Code:
-
dim KGF$ : KGF$ = "C:\Langages\Panoramic\DLL\KGF\KGF.dll" dim USER32$ : USER32$ = "C:\Windows\System32\USER32.dll" dim Kernel32$ : Kernel32$ = "C:\Windows\System32\Kernel32.dll" dim GetTickCount$ : GetTickCount$ = "GetTickCount" : ' KERNEL32.DLL dim GetSystemMenu$ : GetSystemMenu$ = "GetSystemMenu" : ' USER32.DLL dim DeleteMenu$ : DeleteMenu$ = "DeleteMenu" : ' USER32.DLL
' Quelques constantes dim TITRE$ : TITRE$="Exemple d'appel de DLL à l'aide de KGF" dim SC_CLOSE%: SC_CLOSE% = 6 dim MF_BYPOSITION% : MF_BYPOSITION% = HEX("400") CAPTION 0,TITRE$
DIM hmenu% dim buffer$:buffer$=STRING$(30," ")
dim res%, tickcount%, hnd_user32%, hnd_kernel32%
dll_on KGF$ hnd_user32% = dll_call1("LoadDLL",adr(USER32$)) : ' on charge USER32.dll hnd_kernel32% = dll_call1("LoadDLL",adr(Kernel32$)) : ' on charge Kernel32.dll
' Un appel à une fonction native de KGF res% = DLL_call1("KGFdllVersion", adr(buffer$) ) APPLICATION_TITLE "KGF: KGFdllVersion " message "Version : "+buffer$
' on test existence de la fonction GetSystemMenu dans USER32 res%=DLL_CALL2("TargetDLL",hnd_user32%,adr(GetSystemMenu$)) if res%=0 message "Fonction "+GetSystemMenu$+" est inaccessible dans user32.dll" else APPLICATION_TITLE "USER32: GetSystemMenu+DeleteMenu " MESSAGE "on va désactiver le bouton de fermeture de la fenêtre" ' on appelle la fct definie dansTargetDLL (USER32:GetSystemMenu) hmenu% = DLL_CALL2("CallDLL2",HANDLE_FORM(TITRE$),0) ' puis appel à la fct USER32:DeleteMenu res% = DLL_CALL2("TargetDLL",hnd_user32%,adr(DeleteMenu$)) res% = DLL_CALL3("CallDLL3",hmenu%,SC_CLOSE%,MF_BYPOSITION%) MESSAGE "Le bouton de fermeture est desactivé. " end_if
APPLICATION_TITLE "KERNEL32: GetTickCount" ' on cible la fonction GetTickCount dans Kernel32.dll (elle y est !) res% = dll_call2("TargetDLL",hnd_kernel32%,adr(GetTickCount$)) if res%=0 message "Fonction "+GetTickCount$+" est inaccessible dans Kernel32.dll" else ' on appelle la fonction (elle n'a pas de paramètres) tickcount% = dll_call0("CallDLL0") message "KERNEL32: GetTickCount = "+str$(tickcount%)+" " end_if
' on décharge les DLL res% = dll_call1("UnLoadDLL",hnd_kernel32%) res% = dll_call1("UnLoadDLL",hnd_user32%) DLL_OFF ' un petit terminate pour ne pas vous entendre gueuler... ;-) ' Vous avez eu peur, hein ? TERMINATE end
| |
|
| |
Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 18:09 | |
| Bien vu, Nardo ! Cela montre parfaitement le principe. | |
|
| |
silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Tick_Count pour recherche de ralentissement Jeu 30 Avr 2015 - 21:18 | |
| Pour clore le hors sujet:
j'ai fait cette demande car panoramic à pour vocation d'être simple à utiliser. Bien sûr, il y a moyen de contourner ce manque pour les connaisseurs(*), mais tous le monde ne connait pas cette fonction du kernel32. C'est une petite fonction qui ne me semble pas difficile à intégrer et qui serait vraiment utile.
(*):Merci à klaus pour cette excellente DLL "DynamicallyLoadDLL" et, à jean_debord de l'avoir fait connaitre. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Tick_Count pour recherche de ralentissement | |
| |
|
| |
| Tick_Count pour recherche de ralentissement | |
|