 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
vizca321 Lt


Registrado: 06 May 2008Mensajes: 83Ubicación: Mexico
|
Publicado: Lun 04 Jun, 2018 10:13 pm Asunto: correr, detener Thread cada que se pida |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 08 Jun, 2018 10:25 pm Asunto: |
|
|
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 |
|
 |
vizca321 Lt


Registrado: 06 May 2008Mensajes: 83Ubicación: Mexico
|
Publicado: Sab 09 Jun, 2018 12:16 am Asunto: |
|
|
| 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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 12 Jun, 2018 7:53 pm Asunto: |
|
|
| vizca321 escribió: |
Como creo el hilo suspendido? |
| Código: |
new TAlbums(true);
|
Saludos. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|