Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 03-09-2007 09:19:49

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

[RESOLU] PowerBuilder et MultiThreading

Bonjour,



J'ai un bout de code qui utilise des EXECUTE IMMEDIATE et autres curseurs, mais je voudrai pouvoir le stopper à tout moment...
Malheureusement, il ne me laisse comme seul choix que d'attendre patiement la fin de l'execution...


Est-il possible d'executer un code dans un processus/Thread ?erBui

Dernière modification par Melke (04-09-2007 06:40:54)

Hors ligne

 

#2 03-09-2007 11:10:13

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

pourquoi pas ?
ici tu as un exemple de thread
Qu'est ce qui doit dechancher l'arret ?


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#3 03-09-2007 11:15:03

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

un bouton par exemple...

Dernière modification par Melke (03-09-2007 11:36:03)

Hors ligne

 

#4 03-09-2007 11:29:28

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

Melke a écrit:

un bouton par exemple...

Tu declares un boolean à true et avant ton fetch tu testes la valeur de ce boolean que tu mets a false si tu cliques sur le bouton


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#5 03-09-2007 11:35:52

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

le code que tu viens de me montrer m'inspire...

Hors ligne

 

#6 03-09-2007 11:43:59

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] PowerBuilder et MultiThreading

Je me demande si c'est vraiment du script de JCZ dont tu a besoin vu que tu parles de EXECUTE IMMEDIATE n'est ce pas plutôt du côté du param. DB ASYNC que tu devrais regarder ? (plus simple pour ce que tu veux faire je pense)

tiré de l'aide PB :

Allows you to perform asynchronous operations on your database in PowerBuilder. In other words, if you have coded a RetrieveRow event for a DataWindow object or report, you can cancel the current database retrieval operation or start another (non-database) operation that does not use the same database connection before the current operation completes. You can also switch to another Windows process while the retrieval takes place.
By default, PowerBuilder operates synchronously.

Async = value

Parameter    Description
value    A value specifying synchronous or asynchronous operation. Values are:·    0  (Default) Synchronous operation·    1  Asynchronous operation


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#7 03-09-2007 12:33:36

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

en faite, il y a enormément de cursor aussi en plus de mes EXECUTE IMMEDIATE, passer par une thread me permet de stopper à tout moment l'execution de mon bout de code

J'ai regardé au départ se Async = 1, mais je reste bloqué par ems boucle

Hors ligne

 

#8 03-09-2007 14:21:21

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

bon, j'ai mis en pratique ce qui était dans l'exemple, mais j'ai toujours mon bouton bloqué par l'execution du programme!

Dernière modification par Melke (03-09-2007 14:27:13)

Hors ligne

 

#9 03-09-2007 17:59:18

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

Melke a écrit:

bon, j'ai mis en pratique ce qui était dans l'exemple, mais j'ai toujours mon bouton bloqué par l'execution du programme!

c'est à dire ?


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#10 04-09-2007 06:40:37

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

c'est bon aaprès des recherchers poussé, j'ai rajouté un Yield() avant chaque test du "ib_isgoing", ce qui me permet d'avoir la main et de pouvoir cliquez sur le bouton pour l'arrêter.

Hors ligne

 

#11 04-09-2007 08:25:10

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

Bien ...
Si tu veux partager ton code avec nos amis pbdonfeurs n'hesite pas


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#12 04-09-2007 08:28:37

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

attends, je le prépare l'exemple car c'est le code d'un prog du travail...

Dernière modification par Melke (04-09-2007 12:17:52)

Hors ligne

 

#13 04-09-2007 12:17:59

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

– Créer une « Custom Class » pui les sdeux événements principaux : ue_go() et ue_stop()
- Bien sur un bouton lance l'application par ue_go() et un autre pour l'arreter avec ue_stop()

Code: pb

objetnongraphic.event TRIGGER ue_go()

Code: pb

objetnongraphic.event TRIGGER ue_stop()

Code: pb

// ue_go() va démarrer le processus ou l’enchaînement du processus
event ue_go;
// flag compteur sur actif
ib_isgoing = TRUE

// départ dans le process
this.EVENT POST ue_inc()
end event

Code: pb

// et ue_stop() pour stopper le processus
event ue_stop;
// flag compteur sur inactif ...
ib_isgoing = FAlSE
  
end event

- Maintenant, interressons nous au coeur du problème, vous pouvez créer autant de sous evenement que vous le voulez pour les chainer

Code: pb

event ue_inc;
// si compteur actif ....
IF ib_isgoing = TRUE THEN

  // on inc le compteur..
  ii_val_compteur++

// relance evt....
  // les evt sont post pour permettre
  // le controle avec des evt TRIGGER
  this.EVENT POST ue_inc()
  
END IF


- Pratique si cela boucle sur la même fonction, sans réel boucle interne qui bloquerait les ressources... donc petites modifications :

Code: pb

event ue_inc;
int li_i
FOR li_i = 0 TO 20
  Yield()
  IF ib_isgoing = FALSE THEN
    MessageBox("Interruption Utilisateur", "L'utilisateur a appuyé sur le bouton stop")
    RETURN
  END IF
NEXT
Yield()
IF ib_isgoing = TRUE THEN
  this.EVENT POST ue_inc()
END IF
END IF


- Quelques explications :

Description

Yields control to other graphic objects, including objects that are not PowerBuilder objects. Yield checks the message queue and if there are messages in the queue, it pulls them from the queue.

Syntax

Yield ( )

Return value

Boolean. Returns true if it pulls messages from the message queue and false if there are no messages.

Usage

Include Yield within a loop so that other processes can happen. For example, use Yield to allow end users to interrupt a loop. By yielding control, you allow the user time to click on a cancel button in another window. Then code in the loop can check whether a global variable's status has changed. You can also use Yield in a loop in which you are waiting for something to finish so that other processing can take place, in either your or some other application.

Using other applications while retrieving data      Although the user cannot do other activities in a PowerBuilder application while retrieving data, you can allow them to use other applications on their system. Put Yield in the RetrieveRow event so that other applications can run during the retrieval.

Of course, Yield will make your PowerBuilder application run slower because processing time will be shared with other applications.

- en d'autres termes, Yield() permet, pendant une boucle par exemple, de donner la main et de pouvoir cliquer sur un bouton toujours par exemple

Dernière modification par Melke (04-09-2007 12:21:23)

Hors ligne

 

#14 04-09-2007 12:25:36

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading

80 pépites pour ce zoli script utilisant le Yield()


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#15 04-09-2007 12:28:01

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] PowerBuilder et MultiThreading


arigatoo gozaimasu ありがとうございます

* me presse de les déposer à la banque

Dernière modification par Melke (04-09-2007 12:34:11)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22