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 :

Probl�me de thread : Plus de ressources syst�me [Non suivi]


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut Probl�me de thread : Plus de ressources syst�me
    Bonjour, voil� je travail sur un thread qui agie sur une image de type TPicture, qui apr�s traitement est asssign� � un TJPEGImage (afin de compresser biensur). Jusque l� aucun soucix, le seul probl�me recontr� est au moment de SaveToFile du JPEG, il me donne une erreur : "Plus de ressources syst�me" lorsque je bouge la sourie, dans le cas contraire, �a tourne nikel, auriez vous une id�e ?
    Donc je pense que c'est l'�v�nement de la souri qui pose probl�me (le clavier n'agit en rien ici)

    j'ai tent� de contourner ceci, avec un
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
     
    }
    __finally
    {
     
    }
    Mais �a ne fonctionne pas non plus

    Auriez-vous une id�e ?

    Merci

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut Countournement provisoire
    Salut !
    bon j'ai contourn� le probl�me en supprimant mon thread, et en utilisant

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    bool active = true;
    while (active)
    {
    /* Traitement */
    Application->ProcessMessages (); //Pour garder la main de temps en temps
    }
    C'est du provisoire, mais bon �a semble marcher ainsi.

    Si par contrevous avez une id�e sur le probl�me rencontr� avec mon thread.
    Merci

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut Reciblage de l'erreur
    En fait il s'av�re que l'erreur viendrai de l'Assign

    je comprends pas trop pourquoi cette erreur apparait que dans un thread et non dans une appli standard avec un while (1).

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Bonjour,

    Es-tu s�r de synchroniser depuis ton thread tous les appels � des objets VCL ( et donc bien s�r les traitements sur tes TPicture, TJPEG...)

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut synchroniser
    Tu entends quoi par synchroniser ?
    utiliser : Synchronize ()
    c'est bien �a? mais que faudrai-il mettre dedans?

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Tout ce qui fait appel � des objets VCL.
    Regardes le commentaire ajout� par BCB lors le la cr�ation d'un nouvel objet thread.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    je vois bien le principe de synchronize, mais c plus pour un affichage l� non?

    Moi je reste en m�moire, rien de visuel.

    A moins kil existe une m�thode plus simple pour convertir un bmp en jpg sans passer par la classe JPEGImage

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Non, rien � voir avec l'affichage. Le probl�me, c'est la VCL (composants visuels ou non)

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    l'utilisation de synchronize a l'air de r�soudre le pb, mais par contre je suis oblig� de mettre la priorit� du thread a : tpHighest, sinon �a replante.
    Et de plus, g un probl�me avec un deuxi�me thread qui tourne � c�t�, qui quand � lui perd de sa vitesse d'ex�cution...

  10. #10
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    il me donne une erreur : "Plus de ressources syst�me"

    question bete : as tu bien pens� � supprimer Bitmap apr�s son assignation. ?

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    Oui j ai pens�, mais en fait j'suis dans une boucle sans fin (d'ou un thread) qui prend une image bmp et la copie dans un jpg, donc je n'ai pas besoin de supprimer le bmp, mais bon, m�me en testant un delete et apr�s un new � chaque passage de ma boucle, j'ai toujours le m�me soucix.

  12. #12
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    un petit bout de code ?

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    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
    void __fastcall TCapture::Execute()
    {
    //---- Placez le code du thread ici ----
    Bitmap = new Graphics::TBitmap;
     
    while (!Terminated)
            {
            /* On travail ici sur le Bitmap */
     
            Synchronize (assign);
            }
     
    delete (Bitmap);
    }
     
     
    void __fastcall TCapture:: assign ()
    {
    TJPEGImage *jpg = new TJPEGImage;
     
    jpg->Assign (Bitmap);
     
    Application->ProcessMessages ();
     
    if (FileExists ("./out/" + IntToStr (i) + ".jpg"))
            DeleteFile ("./out/" + IntToStr (i) + ".jpg");
     
    jpg->SaveToFile ("./out/" + IntToStr (i) + ".jpg");
    delete (jpg);
    }

  14. #14
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    Peut etre que �a vient enpartie du fait que ce petit de code VCL est hors de synchronize..

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    Bitmap = new Graphics::TBitmap;
     
    while (!Terminated)
    {
    /* On travail ici sur le Bitmap */
    ...

  15. #15
    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
    Hello

    Tu peux utiliser des objets de la VCL dans tes threads sans passer par des Synchronize, du moment que ces objets ne sont pas utilis�s par le thread principal. Ca veut donc dire que tes objets li�s � l'affichage doivent obligatoirement �tre modifi�s via un synchronize.
    Maintenant, rien ne t'emp�che (par exemple) de bricoler avec des TQuery � l'int�rieur de tes threads, si ces TQuery sont cr��s dans le thread (new TQuery(NULL)), ainsi que leur TDatabase li�, ainsi que le TSession li� (voir TSessionList)...

    Si j'ai bien compris, tu as un TPicture nomm� Bitmap, et un TJPEGImage nomm� jpg. Si Bitmap est sur une fiche, faut faire le Assign dans une m�thode appel�e par Synchronize...

    Si tu as un bout de code � nous montrer, n'h�site pas...

    A++

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    �a semble mieux marcher, je peux au moins utiliser des priorit�s inf�rieurs (�a rame moins)

    Mais par contre mon traitement se fait image par image avec � chaque �tape �criture sur le disque, donc traitement assez long

    Pensez-vous qu'il est possible de r�aliser un syst�me ou 2 threads en concurrence se partagents un tableau d'une centaine de jpg, une thread rempli, et l'autre sauvegarde les premi�res si elles sont remplies, et ainsi de suite, et d�s qu'une jpg est sauv�e, elle est lib�r� pour le remplissage (bon y aura toujours un soucix de temps je pense, vu qu'une ira plus vite que l'autre)

    PS : je n'ai rien du tout sur ma fiche, tout en m�moire

  17. #17
    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
    (Oups je n'avais pas vu les messages pass�s entre temps)

    Curieux, dans un projet quasi vide, ta boucle Execute a l'air de tourner sans soucis (pas de handle de perdus, m�moire stable)... (par contre le Application->ProcessMessages dans assign met le CPU � 100%, et sans �a marche nickel)

    Pour ta suggestion: pourquoi pas ? un TThreadList permettrait de partager les TJPEGImage

    A++

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par d�faut
    Oulla explorer.exe aime pas le gros!

    Bon j'aurai ptetre une solution, mais bon, savez vous si on peut v�rifier si 2 images sont identiques ou non, ainsi, je ne auvegarde que lorsque les images sont diff�rentes, afin de gagner de la charge m�moire et disque.

    Sinon je regarderai du c�t� de : TThreadList

Discussions similaires

  1. Probl�me de threads
    Par iwky dans le forum GTK+ avec Python
    R�ponses: 2
    Dernier message: 04/03/2006, 13h45
  2. [VB.NET] Probl�me de Thread
    Par Sadneth dans le forum ASP.NET
    R�ponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Probl�me synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    R�ponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Probl�me de Threads + Timers
    Par Invit� dans le forum MFC
    R�ponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Probl�me de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    R�ponses: 2
    Dernier message: 12/06/2003, 22h22

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