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

C++Builder Discussion :

Not enough timers available


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut Not enough timers available
    Bonjour,

    mon appli est développée avec embarcadero rade studio XE.
    De temps en temps un message d'erreur s'affiche : Not enough timers available.
    Quelqu'un a t'il déjà rencontré ce problème ? Une idée pour trouver le problème ?
    Trop de timers que je ne remets pas à enable = false ??

    merci pour votre aide !

    Pascale38

  2. #2
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    A vérifier mais je crois me rappeler qu'il y a une limitation du nombre de timer, mais qui vient de windows, non du C++ Builder.
    Combien de Timer as-tu au total?

    Une solution possible consisterait à essayer de réduire le nombre de timer en groupant.
    Genre si tu as 2 timers, l'un à 50ms et l'autre à 200ms, n'en fais qu'un seul avec une variable que tu incrémentes et si la variable = 4 tu fais l'action de l'ancien timer 200ms et tu remets la variable a zéro.

    Je sais pas si je suis clair je peux donner un exemple de code au pire si besoin.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Oui en effet il y a une limite aux nombre de Timers dans Windows. Voici un article (Anglais) qui en parle:
    http://blogs.msdn.com/b/oldnewthing/...7/9886147.aspx

    La limite est très haute dans les versions récentes de Windows, cependant ce qui est dit est que si l'application est gourmande en ressources cette limite sera atteinte faute de mémoire disponible.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Argol_Medusa : oui oui je crois que c'est clair, je crois que je vois ce que tu veux dire mais bon j'ai une vingtaine de timer en tout, et ils sont loin de tous tourner en même temps !

    Mais alors du coup le problème ne vient peut être pas de mon appli ?
    Et donc si tous les timers windows sont déjà utilisés par d'autres appli, on fait comment ?

    Je trouve tout ça assez bizarre quand même !

    Du coup pour l'instant je sèche là...
    merci en tout cas pour vos réponses !!
    Pascale38

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 053
    Par défaut
    Tu utilises TTimer ou API CreateTimer ?

    20 simultanés mais as-tu de nombreuses créations\libérations ?

    Tu ne pourrais pas gérer un TTimer commun pour regrouper plusieurs Interval où tu gères manuellemet certains délais que tu calcules via System:iagnostics::TStopwatch (QueryPerformanceCounter)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    J'utilise TTimer, et non justement ils ne sont jamais tous en simultanés !!
    En fait sur quasi toutes mes pages, j'ai un timer pour rafraichir les données reçues. Une seule page peut être affichée à la fois + deux timer sur la fenêtre principale. Les pages en général ne contiennent qu'1 timer que je passe à enabled = true quand j'affiche la page et à false quand je la ferme...
    Je me demande si le problème ne vient pas plutôt de là, est ce qu'un timer est recréé à chaque ouverture de page et si oui est ce qu'il est bien libéré à la fermeture ??
    Mes Form sont créées avec un new TFormxxx, je suis partie du principe que la libération se faisait automatiquement car comment faire un delete de la fenêtre sur le close ??? C'est peut être bien là que j'ai une grosse erreur ???

  7. #7
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Citation Envoyé par Pascale38 Voir le message
    Mes Form sont créées avec un new TFormxxx, je suis partie du principe que la libération se faisait automatiquement car comment faire un delete de la fenêtre sur le close ??? C'est peut être bien là que j'ai une grosse erreur ???
    Ha oui il est fort possible que le problème vienne de là effectivement, lors du new plein d'objets sur ta form vont être créés en mémoire, dont possiblement des threads, timers etc., et il faut que la destruction soit bien maitrisée.

    Il faudrait voir comment et où tu as fais tes "new", pour voir où mettre le delete objet et le objet = NULL; derrière mais là, faut nous montrer un peu de code parce que à l'aveugle ... ^_^'

    Question à tous hasard, ton MessageBox ne s'afficherait-il pas toujours au bout du même nombre d'ouverture / fermeture de fenetres ? (signe possible d'un débordement lié à la création d'un certain nombres d'objets sans delete ).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Une appli toute simple pour vous expliquer mon problème :

    le fichier c++ principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
    #include <tchar.h>
    //---------------------------------------------------------------------------
    USEFORM("Unit29.cpp", Form29);
    USEFORM("Unit30.cpp", Form30);
    //---------------------------------------------------------------------------
    WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
    {
    	try
    	{
    		Application->Initialize();
    		Application->MainFormOnTaskBar = true;
    		Application->CreateForm(__classid(TForm29), &Form29);
    		Application->Run();
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	catch (...)
    	{
    		try
    		{
    			throw Exception("");
    		}
    		catch (Exception &exception)
    		{
    			Application->ShowException(&exception);
    		}
    	}
    	return 0;
    }
    //---------------------------------------------------------------------------
    ma form principale (avec FormStyle = fsMDIForm)sur laquelle j'ai mis un bouton qui ouvre ma fenêtre secondaire (qui a comme FormStyle fsMDIForm et que j'ai mis en "available form" à la place de "auto-create form") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit29.h"
    #include "Unit30.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm29 *Form29;
    //---------------------------------------------------------------------------
    __fastcall TForm29::TForm29(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm29::Button1Click(TObject *Sender)
    {
    	Form30 = new TForm30(this);
    }
    //---------------------------------------------------------------------------
    Voilà et donc je ne sais pas comment savoir quand ma fenêtre est fermée pour pouvoir lui faire un delete...

    J'espère avoir été claire !!!
    Pascale38

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Et pour répondre à :
    Question à tous hasard, ton MessageBox ne s'afficherait-il pas toujours au bout du même nombre d'ouverture / fermeture de fenetres ? (signe possible d'un débordement lié à la création d'un certain nombres d'objets sans delete ).
    ben j'en sais trop rien, car je n'arrive pas à reproduire le problème à la demande !! Perso je l'ai vu qu'une fois et sinon problème remonté pas un utilisateur donc difficile d'en savoir plus !!

    Pascale38

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Citation Envoyé par Pascale38 Voir le message
    Voilà et donc je ne sais pas comment savoir quand ma fenêtre est fermée pour pouvoir lui faire un delete...
    Tu n'as pas forcément besoin de le savoir, tu peux le laisser faire tout seul, en mettant du code sur l'événement OnClose du TForm que tu veux détruire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm30::FormClose(TObject *Sender, TCloseAction &Action)
    {
      Action = caFree;
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    ahhhhhhhhhhhhhhhhhhhh merci totoche d'éclairer ma lanterne sur ce souci de libération, je m'en vais de ce pas vérifier que j'ai bien fait ça partout, mais effectivement je ne crois pas !!!

Discussions similaires

  1. There is not enough memory available now
    Par cersan dans le forum AIX
    Réponses: 3
    Dernier message: 13/08/2010, 14h17
  2. [WD14] Not enough storage is available to process this command? Pourquoi
    Par chapeau_melon dans le forum WinDev
    Réponses: 0
    Dernier message: 28/05/2009, 07h51
  3. restriction souris fenêtre : erreur 8 not enough storage ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 4
    Dernier message: 12/02/2008, 15h14
  4. [ORA-00371] Not enough shared pool memory !!!
    Par max44410 dans le forum Installation
    Réponses: 6
    Dernier message: 30/11/2005, 19h47

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