Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

correr, detener Thread cada que se pida

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: correr, detener Thread cada que se pida Responder citando

quiero llamar este hilo cada que lo necesite pero solo me deja una sola vez si lo llamo de nuevo el equipo se detiene, codigo CB6
Código:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <Inifiles.hpp>
#include "TFiltro.h"
#include "Principal.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TAlbums::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
        TStringList* Lectura;
        TStringList* Campos;
        TStringList* Compara;

__fastcall TAlbums::TAlbums(bool CreateSuspended)
        : TThread(CreateSuspended)
{
        Compara = new TStringList;
        Campos  = new TStringList;
}
//-------------------------
void __fastcall TAlbums::Listar(String dir, TStrings* sl,int fi,int ff)
{
    TSearchRec sr;
    AnsiString inicio,fin;
    int p=0;
    char cad[10][5] = {".cdg",".mp3",".wma",".m4a",".mpg",".mp4",".wmv",".avi",".divx",".mkv"};
    bool finalizado = FindFirst(dir + "\\*.*", faAnyFile, sr);
    while (!finalizado){
        if(sr.Name != "." && sr.Name != ".."){
            if (sr.Attr & faDirectory ){
                Listar(dir + "\\" + sr.Name, sl,fi,ff);
                }
            if (sr.Attr & faArchive){
                   for(int m = fi;m < ff;m ++)
                      if(sr.Name.SubString(sr.Name.LastDelimiter("."),sr.Name.Length()).LowerCase()==cad[m]){
                         if(fi==1 && ff == 4){
                              if(Compara->IndexOf(dir.Trim())== -1){
                                 sl->Add(dir.Trim());
                                 }
                              }
                         else {
                              sl->Add(dir.Trim());
                              }
                         if(sl->Count > 0){
                           for(int x = p; x < sl->Count-1; x++){
                               inicio = sl->Strings[x];
                               fin    = sl->Strings[x+1];
                               if(inicio == fin){
                                  sl->Delete(x+1);
                                  x--;
                                  }
                               else p++;
                               }
                            }
                         }
                   }
            }
        finalizado = FindNext(sr);
        }
    FindClose(sr);
}
//---------------------------------------------------------------------------

void __fastcall TAlbums::Execute()
{
        String portable = ExtractFilePath(Application->ExeName);
        //---- Place thread code here ----
        TIniFile *Config = new TIniFile(portable+"\\Config.ini");
        int n = Config->ReadInteger("Albums","Count",0);
        try{
        if(n != 0){
          Compara->Clear();
          for(int f=0;f < n;f++){
              String Genero = Config->ReadString("Albums","Direccion"+String(f),portable+"\\Rock");
              Genero = Genero.SubString(Genero.LastDelimiter(",")+1,Genero.Length());
              //Config->ReadString("Albums","Direccion"+String(f),Genero);

                Campos->Clear();
                Listar(Genero, Campos,0,10);
                Compara->AddStrings(Campos);
                Campos->Insert(0,"RockProy");
                Campos->SaveToFile(portable + ExtractFileName(Genero)+".txt");
                }
              Compara->Insert(0,"RockProy");
              Compara->SaveToFile(portable +"RockSerch.txt");
              }
          }
       
         __finally{
                delete Config;
                delete Campos;
                delete Compara;
                }

}
//---------------------------------------------------------------------------

Así lo llamo
Código:
TAlbums* nt = new TAlbums(false);
        nt->FreeOnTerminate = true;

_________________
[code:1]//----------------Att Gabriel----------------
void Gracias(){
if (Respuesta == true){
Showmessage("Muchisimas Gracias!")
else
Showmessage("Ojala te sirva... ^_^ ");
}[/code:1]
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Si el hilo lo creas no suspendido, es mejor meter FreeOnTerminate = true; en el constructor. Si el hilo no ha terminado y arrancas otro, ten en cuenta que tienes variables globales que se compartirán y eso no es Thread-Safe. Tu error va a ir por ese camino. En general la VLC no es Thread-Safe.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

escafandra escribió:
Si el hilo lo creas no suspendido, es mejor meter FreeOnTerminate = true; en el constructor. Si el hilo no ha terminado y arrancas otro, ten en cuenta que tienes variables globales que se compartirán y eso no es Thread-Safe. Tu error va a ir por ese camino. En general la VLC no es Thread-Safe.

Saludos.


Como creo el hilo suspendido?
_________________
[code:1]//----------------Att Gabriel----------------
void Gracias(){
if (Respuesta == true){
Showmessage("Muchisimas Gracias!")
else
Showmessage("Ojala te sirva... ^_^ ");
}[/code:1]
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

vizca321 escribió:

Como creo el hilo suspendido?


Código:

new TAlbums(true);



Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.