# Environnements de dveloppement > Autres EDI > Powerbuilder >  Excuter 2 fonctions en parallle

## quiper

Est-il possible en PB 10.5 d'excuter plusieurs fonctions en parallle, la 2me fonction se dclenchant 5mn aprs la 1re, mme si cette dernire n'est pas termine, la 3me 10 mn aprs la 1re, et ainsi de suite. Le declenchement des fonctions se fait  partir d'une window. J'ai essay d'utiliser la fonction timer et l'event timer mais cela ne fonctionne pas.

----------


## Thig

Bonjour

Il est possible d'excuter des processus en parallle. Ainsi, on peut avoir l'interface de l'application excut dans "thread" puis en parallle avoir des classes  non visual object  excuter dans dautres  thread 

Pour cela il faut utiliser la fonction SharedObjectRegister. 

Un exemple est donn sur le site de sybase : rechercher "MultiThreaded PowerBuilder" sur site www.Sybase.com

voir : 
http://www.sybase.com/detail?id=47802

A+ Thig

----------


## quiper

Bonjour,

tout d'abord merci pour la rponse. 

En fait j'avais dj vu cette doc sur le site de sybase mais je ne l'ai pas dtaille car apparement cela ne s'applique qu'aux objects non-visuels. 

Dans mon cas, j'ai une appli qui tourne en batch la nuit, et qui excute un certains nb de choses, dont des data window, des pipes ..., regroupes dans une window function, pour transfrer des donnes depuis une base centrale vers 1 base distante. Tout le code se situe ds l'open de la window, et lorsque c'est termin, la fentre puis l'appli se ferment. La fonction est appele pour 10 bases distantes (la connexion  la base distante est passe en paramtre), et donc actuellement je suis oblige de les appeler les unes aprs les autres, et j'aurais voulu les appeler en parallle pour gagner du temps.
J'ai essay d'utiliser la fontion et l'event timer, mais la aussi, il faut attendre la fin de l'excution du script pour passer  la suite.

----------


## Thig

Bonjour

Oui, cette technique ne s'applique qu'au non visual object. 

Il faut sparer l'IHM des traitements. Le code faisant le transfert doit tre extrait de la fentre et mis dans une fonction du nvo. Tu peux  remplacer les datawindows par des datastores et les associs au nvo. Ensuites-tu peux associer autant de nvo que tu veux faire de traitement en parallle  la fentre. Ca fait beaucoup de modif, mais c'est plus propre.

Sinon, essaye peut-tre du ct de la fonction Yield(), elle permet de redonner la main  l'utilisateur sur l'IHM pendant que Pb excute un traitement dans une boucle, ... mais a mon avis ca va pas marcher !

A+, Thig

----------


## quiper

Bonjour,

En fait j'ai russi  rsoudre mon problme en utilisant la fonction run(). Dans le timer de ma window je rappelle l'application elle mme, en jouant sur les paramtres. La fonction run ayant l'avantage de lancer un exe et de rendre immdiatement la main  PB, l'exe lanc continuant sa vie de son cot. Cela m'a juste demand une petite modif pour traiter les paramtres de l'exe pour que la 1re excution de l'appli lance uniquement le timer, lequel relance l'appli pour une base distante donne, toutes les x secondes, alors que les autres lancement de l'appli (issu du timer) lancent juste la window et la fonction pour excuter le transfert de donnes sur la base distante.

----------


## tagada le hun

Ta solution est viable mais je pense qu'elle trs gourmande en ressource. La solution avec un thread est bien meilleure en trme de consommation mmoire...

----------

