Bonjour à tous!
J'aimerais savoir comment faire une pause très courte (de l'ordre du millième de seconde). Mon but est de faire une animation lors de l'apparition d'un écran de travail.
Merci d'avance!
Bonjour à tous!
J'aimerais savoir comment faire une pause très courte (de l'ordre du millième de seconde). Mon but est de faire une animation lors de l'apparition d'un écran de travail.
Merci d'avance!
eh bien...
une boucle, ou plusieurs boucles imbriquées, avec autant de NOP qu'il faut à l'intérieur pour faire la durée que tu veux ...
oui mais, dépendant de la fréquence du processeur me diras tu.
essaye alors le time stamp counter.
que tu ne trouveras que sur pentium et quelques autres processeurs ....Mnemonic: RDTSC
Opcode : 0F 31
Bug in : Poorly documented for Pentium Processor
Function:
RDTSC reads a Pentium internal 64 bit register which is being incremented
from 0000 0000 0000 0000 at every CPU internal clockcycle. Note that this
gives a clockcycle-accurate timer with a range of more than 8800 years at
66 Mhz...
The instruction places the counter in the EDX:EAX register pair.
je ne vois pas grand chose d'autre.
golem
+++
Merci beaucoup pour l'info.
Malheureusement c'est loin d'être une fonction commune à tous les processeurs et mon programme est destinée à être mis un ordinateur assez ancien (avec un processeur de 16bits)...
Mais merci encore pour l'info elle est soigneusement notée dans un petit coin![]()
Il m'indique qu'il ne connais pas le Symbole 'Sleep'. Ca me paraissait logique mais je voulais quand même essayer...
Soit mon processeur (ou compilateur, qui est TASM) ne rend pas possible ce code, soit tu as hormis de définir la procedure Sleep.
Sous Masm elle foctionne super bien![]()
que veux tu que j'te dise ?![]()
Elle fait partie de Kernel32 si je ne me trompe pas.
Un rapide EXP S t'en dira plus. @+
non c'est tout a fait normal qu'elle ne fonctionne pas... je ne sais plus je crois quil faut inclure kernell32.lib, et definir un prototype de fonction. Je me rappelle plsu comment on fauit avec tasm
Oki Je prend note... Je crois savoir à qui je peux deander comment définir un prototype de fonction sous TASM, mais je ne le verrais que la semaine prochaine... La suite au prochain épisode..![]()
Je pense pas que le problème vienne de là. Parce que les Prototypes ne servent qu'à utiliser la macro "Invoke".
Par exemple on ne peut pas utiliser
invoke ExitProcess, eax
si le proto n'a pas été définit mais rien n'empêche
Push eax
Call ExitProcess
Donc je doute que ça vienne de ça.
Je me demande plutôt si Sleep n'appartiendrait pas à une des lib spécifiques à masm est non pas à une des DLL communes.
Dans ce cas il faudrait que tu la récupère.
Je viens de vérifier avec SoftIce
un EXP sleep me donne
Kernel32:
Sleep
SleepEx
donc je vois pas pourquoi un call Sleep ne fonctionnerait pas.
ou alors ta version de Kernel ne possède pas cette fonction
Essaies la même chose chez toi pour vérifier que cette fonction existe.
Je regarderais ça ce soir (pas vraiment le temps de le faire maintenant)
Mais je peut te dire que ma version de Kernel32.dll est : 5.1.2600.1106
@ ce soir...
nop, Sleep appartiens a kernell32.lib. Par ailleur les prototypes ne servent pas qu'a l'utilisation de invoke. Sous MASM, il permettent d'importer les fonctions egalement. Sinon il y a des mots clés pour l'importation. Quoiqu'il en soit, il faut avertir le compilateur que le symbole Sleep est une fonction définie dans un autre module.
Oki merci pour l'infoEnvoyé par Blustuff
![]()
Aah! Heu... en faitdésolé de profiter un peu de votre patience
, mais comment on fait sous TASM pour "avertir le compilateur" ?
Merci pour votre patience![]()
C'est pas le problème. Un fichier *.lib et un fichier .dll c'est la même chose pratiquement. le lib est l'étape de création précédant le format dll (suffit d'utiliser link.exe pour qu'il associe les offsets pour chaque ligne d'instruction). donc on retrouve EXACTEMENT les même fonctions.Envoyé par Blustuff
D'ailleurs SoftIce ne s'y trompe pas.
Son problème est ailleurs mais je vois pas trop où.
A la rigueur pourquoi ne pas créer un Timer, c'est si simple.
salut,
il faut que tu déclares la fonction de cette manière
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part extrn Sleep:near
je suis plus très sûr
Code : Sélectionner tout - Visualiser dans une fenêtre à part extrn Sleep:proc
et ensuite selon le linker :
si microsoft alors il faut que tu linke kernel32.lib
si borland alors il faut que tu linke avec import32.lib
Partager