Pues el error lo tienes aquí:
Código:
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Capturar *x = new Capturar();
x->StopThreadPackets();
delete x;
}
Estas creando un objeto nuevo de la clase Capturar (x) y llamas a una función que utiliza un miembro de esa clase:
Código:
void Capturar::StopThreadPackets()
{
miThread->Terminate();
}
Pienso que miThread pertenece a la clase Caputrar. miThread es un miembro puntero que si no es un miembro static, ¿a donde apunta al crear un nuevo objeto Capturar?... Pues a un nuevo Thread, probablemente, no conozco más de tu código. Pero es seguro que no apunta al Thread que se está ejecutando, por lo que Terminate() termina con el nuevo Thread y no con el que tu esperabas.
La solución es que tengas controlado el puntero miThread de forma que sea una variable global de Form1, static de la clase Capturar, que lo copies al crear un elemento Capturar o que simplemente Form1 tenga un miembro de la clase Capturar ya creado de forma que no necesites crear uno nuevo para la función Button4Click. En definitiva que sepas que miThread apunta a lo que tu quieres.
Saludos.