to LogRus
Сейчас использую потоки, только через boost::thread потому, что удобно и работает одинаково и в Linux и Windows.
Чего и вам советую.
можно ссылки на документацию
может с этого надо было сразу начать
кагда открываю .bpr всё работает, но сделать его как новое приложение никак 

вставляю код из примера - объясните КАК ТУТ СОЗДАЁТСЯ 
ThreadForm 
ThreadFormUnit.h
#ifndef ThreadFormUnitH
#define ThreadFormUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TThreadForm : public TForm
{
__published:	// IDE-managed Components
   TButton *Start;
   TButton *Stop;
   void __fastcall StartClick(TObject *Sender);
   void __fastcall StopClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
   __fastcall TThreadForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TThreadForm *ThreadForm;
//---------------------------------------------------------------------------
#endif
ThreadFormUnit.cpp
#include <vcl.h>
#pragma hdrstop
#include "ThreadFormUnit.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TThreadForm *ThreadForm;
HANDLE Thread;
DWORD WINAPI ThreadFunc(LPVOID Param)
{
   HANDLE MainWnd(Param);
   RECT R;
   GetClientRect(MainWnd, &R);
   const MaxWidth = R.right - R.left;
   const MaxHeight = R.bottom - R.top;
   int X1, Y1, X2, Y2, R1, G1, B1;
   bool IsEllipse;
   while(true)
   {
      HDC DC = GetDC(MainWnd);
      X1 = rand() % MaxWidth;
      Y1 = rand() % MaxHeight;
      X2 = rand() % MaxWidth;
      Y2 = rand() % MaxHeight;
      R1 = rand() & 255;
      G1 = rand() & 255;
      B1 = rand() & 255;
      IsEllipse = rand() & 1;
      HBRUSH Brush = CreateSolidBrush(
         RGB(R1, G1, B1));
      SelectObject(DC, Brush);
      if(IsEllipse)
         Ellipse(DC, X1, Y1, X2, Y2);
      else
         Rectangle(DC, X1, Y1, X2, Y2);
      ReleaseDC(MainWnd, DC);
      DeleteObject(Brush);
   }
}
__fastcall TThreadForm::TThreadForm(TComponent* Owner)
   : TForm(Owner)
{
   randomize();
   DWORD Id;
   Thread = CreateThread(0, 0, ThreadFunc,
      ThreadForm->Handle, CREATE_SUSPENDED, &Id);
   if(!Thread)
   {
      ShowMessage("Error! Cannot create thread.");
      Application->Terminate();
   }
}
void __fastcall TThreadForm::StartClick(TObject *)
{
   ResumeThread(Thread);
   Start->Enabled = false;
   Stop->Enabled = true;
}
void __fastcall TThreadForm::StopClick(TObject *)
{
   SuspendThread(Thread);
   Stop->Enabled = false;
   Start->Enabled = true;
}