IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Powerbuilder Discussion :

Exécuter 2 fonctions en parallèle


Sujet :

Powerbuilder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Exécuter 2 fonctions en parallèle
    Est-il possible en PB 10.5 d'exécuter plusieurs fonctions en parallèle, la 2ème fonction se déclenchant 5mn après la 1ère, même si cette dernière n'est pas terminée, la 3ème 10 mn après la 1ère, 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.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    Bonjour

    Il est possible d'exécuter des processus en parallèle. Ainsi, on peut avoir l'interface de l'application exécuté dans "thread" puis en parallèle avoir des classes « non visual object » exécuter dans d’autres « 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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    tout d'abord merci pour la réponse.

    En fait j'avais déjà vu cette doc sur le site de sybase mais je ne l'ai pas détaillée 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 exécute un certains nb de choses, dont des data window, des pipes ..., regroupées dans une window function, pour transférer des données 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 fenêtre puis l'appli se ferment. La fonction est appelée pour 10 bases distantes (la connexion à la base distante est passée en paramètre), et donc actuellement je suis obligée de les appeler les unes après les autres, et j'aurais voulu les appeler en parallèle 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'exécution du script pour passer à la suite.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    Bonjour

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

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

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

    A+, Thig

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    En fait j'ai réussi à résoudre mon problème en utilisant la fonction run(). Dans le timer de ma window je rappelle l'application elle même, en jouant sur les paramètres. La fonction run ayant l'avantage de lancer un exe et de rendre immédiatement la main à PB, l'exe lancé continuant sa vie de son coté. Cela m'a juste demandé une petite modif pour traiter les paramètres de l'exe pour que la 1ère exécution de l'appli lance uniquement le timer, lequel relance l'appli pour une base distante donnée, toutes les x secondes, alors que les autres lancement de l'appli (issu du timer) lancent juste la window et la fonction pour exécuter le transfert de données sur la base distante.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 14
    Points : 16
    Points
    16
    Par défaut Solution gourmande
    Ta solution est viable mais je pense qu'elle très gourmande en ressource. La solution avec un thread est bien meilleure en tèrme de consommation mémoire...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]Comment exécuter une fonction tous les jours
    Par pseudomh dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/06/2006, 16h10
  2. Réponses: 5
    Dernier message: 28/04/2006, 14h40
  3. exécution de fonction
    Par MANU_2 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/09/2005, 16h50
  4. Est-il possible d'exécuter une fonction à partir de fichier
    Par magic8392 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/09/2005, 13h59
  5. [VB.NET] Exécuter une fonction VB sur un Datagrid
    Par MiJack dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/09/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo