Page 1 sur 1
utiliser les interruptions système.
Publié : lun. 14/juin/2004 13:06
par freddix
J'aimerais savoir si il serait possible de créer une procédure et de la lancer sous interruption ( pour qu'elle s'exécute automatiquement à chaque frame ou boucle du système ) ... Un peu comme à l'époque sur Amiga lorsqu'on codait une routine sous interruptions softwares ....
Merci de me dire comment procéder pour mettre le procédure sous interruption et comment l'arréter ... si cela est possible bien sur

Publié : lun. 14/juin/2004 13:39
par Backup
ha ! les TRAPs du 68000

avec detournement du reset et compagnie
Publié : lun. 30/août/2004 13:14
par freddix
personne n'a pu répondre à cette question ?
Publié : lun. 30/août/2004 14:06
par Dr. Dri
je pense qu'il faut s'en remettre à notre grand gourou, fred
mais on le vois pas souvent ces temps ci... c'est l'été et il doit profiter du soleil :p
enfin j'espere qu'il aura une réponse positive ^^ c'est à coup sûr tres intéressant à savoir
Dri

Publié : mar. 07/sept./2004 6:24
par filperj
Pour les interruptions je sais pas, mais dans ton cas un timer devrai faire l'affaire.
Petit essai:
Code : Tout sélectionner
Structure timerarg
hwin.l
msg.l
idevent.l
systemtime.l
EndStructure
Global varglobale.l , timerarg.timerarg
Procedure fonctiontimer(hwin,msg,idEvent,systemtime);il faut toujours prendre 4 arguments
varglobale+1
timerarg\hwin=hwin;la fenêtre concernée (ici 0 car il n'y en a pas)
timerarg\msg=msg ;le message #WM_TIMER (aucun intérêt)
timerarg\idevent=idevent; l'identifiant du timer
timerarg\systemtime=systemtime; heure système en millisecondes
EndProcedure
#fois_par_seconde=20
If InitSprite() And OpenScreen(800,600,32,"Timer") And InitKeyboard()
timerid=SetTimer_(0,0,1000/#fois_par_seconde,@fonctiontimer())
Repeat
FlipBuffers()
ClearScreen(0,0,100)
If StartDrawing(ScreenOutput())
BackColor(0,0,100)
FrontColor(255,255,0)
Locate(20,20) : DrawText("Appuyez sur espace pour tuer le timer.")
Locate(20,50) : DrawText("varglobale "+Str(varglobale))
Locate(20,70) : DrawText("hwin "+Str(timerarg\hwin))
Locate(20,90) : DrawText("msg "+Str(timerarg\msg))
Locate(20,110) : DrawText("idevent "+Str(timerarg\idevent))
Locate(20,130) : DrawText("systemtime "+Str(timerarg\systemtime))
StopDrawing() : EndIf
ExamineKeyboard()
If KeyboardPushed(#pb_key_space) And timerid
KillTimer_(0,timerid)
timerid=0
EndIf
If KeyboardReleased(#pb_key_escape)
Break
EndIf
ForEver
EndIf
If timerid
KillTimer_(0,timerid)
EndIf
Publié : mar. 07/sept./2004 19:51
par Flype
des vraies interruptions genre Amiga je sais pas non plus...
mais en prog "normale" en pure ya bien au moins 2 solutions :
Les Threads
Les Timers comme montré filperj
Publié : jeu. 09/sept./2004 20:03
par freddix
@filperj :
désolé mais j'ai vraiment besoin d'utiliser les interruptions software ...
car c un processus qui tourne en parallèle, qui ne nécessite pas beaucoup de ressources mais qui a besoin de travailler à coté ...
Publié : jeu. 09/sept./2004 20:27
par Flype
à coté de quoi ? de ton programme purebasic ou de ton OS ?
as tu un exemple dans un autre langage, c ou vb ou autre ?
j'ai trouvé un exemple d'interuption souris ici
http://www.geocities.com/SiliconValley/ ... /mouse.txt. c'est de ca que tu parles ?
Publié : jeu. 09/sept./2004 22:32
par Le Soldat Inconnu
quel évènement souhaites-tu capter exactement ?
en général, pour une insertion de cd par exemple, on a un évènement qui arrive et qu'on peut récupérer soit dans un callback, soit avec WaitWindowEvent()
Publié : ven. 10/sept./2004 10:57
par filperj
@Flype:
Je ne connais pas le C (c'est bien du C?), mais ton exempple commence par:
NOTE: THIS EXAMPLE HAS TO BE COMPILED WITH LARGE MEMORY MODEL.
Si je ne me trompe pas, les prog en mode protégé ou virtuel utilisent le modèle mémoire "flat", non segmenté...
Je vais peut-être dire une connerie, mais tu es sûr que ce n'est pas un prog pour le DOS ?
J'ai cru comprendre que l'utilisation des interruption en 32 bits est nettement plus compliquée qu'en 16 bits (réel), et que c'est bien pour ça qu'on utilise plutôt les DLL de l'API
J'ai bien peur que Freddix soit en train de se casser la tête pour rien...
Publié : ven. 10/sept./2004 18:46
par Flype
moi j'en sais rien justement... le code j'ai chercher dans google...
je sais qu'il utilise une interruption système / logicielle pour capturer les évenements souris. maintenant je demande juste si freddix a des exemples... qqchose de concret pour nous guider parceque je vois toujours pas exactement ce qu'il veut.
Publié : sam. 11/sept./2004 21:52
par freddix
Je suis désolé mais je ne peux pas réveler l'objectif ... ( tant que le projet n'est pas finit , tout ce que je peux dire c'est que cela me servirat pour X4 ) ... mais j'ai besoin d'un truc qui soit géré comme la souris par exemple .... sans timer .... pas en thread ( car ca fait trop ramer le prog principal ) ... j'ai besoin que ce soit appelé à chaque Frame ...