utiliser les interruptions système.

Sujets variés concernant le développement en PureBasic
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

utiliser les interruptions système.

Message 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 ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ha ! les TRAPs du 68000 :) avec detournement du reset et compagnie
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message par freddix »

personne n'a pu répondre à cette question ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 :)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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

Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message 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é ...
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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 ?
Image
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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 :roll:

J'ai bien peur que Freddix soit en train de se casser la tête pour rien...
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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.
Image
freddix
Messages : 101
Inscription : dim. 08/févr./2004 19:37

Message 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 ...
Répondre