Skip to content
Snippets Groups Projects
Commit 2252a102 authored by rswindell's avatar rswindell
Browse files

CLX TThread demo for BorCon.

parent 09d4a912
No related branches found
No related tags found
No related merge requests found
//---------------------------------------------------------------------------
#include <clx.h>
#pragma hdrstop
#include "MainUnit.h"
#include "ThreadUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.xfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CriticalSection = new TCriticalSection();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateButtonClick(TObject *Sender)
{
TMyThread* NewThread = new TMyThread(true);
NewThread->Log=Log;
NewThread->CriticalSection = CriticalSection;
ListBox->Items->AddObject(NewThread->ThreadID, NewThread);
NewThread->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::KillButtonClick(TObject *Sender)
{
for(int i=0;i<ListBox->Items->Count;i++)
if(ListBox->Selected[i]) {
TMyThread* MyThread = (TMyThread*)ListBox->Items->Objects[i];
MyThread->FreeOnTerminate = true;
MyThread->Terminate();
ListBox->Items->Delete(i);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef MainUnitH
#define MainUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <SyncObjs.hpp>
#include <QControls.hpp>
#include <QStdCtrls.hpp>
#include <QForms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TListBox *ListBox;
TButton *CreateButton;
TButton *KillButton;
TMemo *Log;
void __fastcall CreateButtonClick(TObject *Sender);
void __fastcall KillButtonClick(TObject *Sender);
private: // User declarations
public: // User declarations
TCriticalSection* CriticalSection;
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
object Form1: TForm1
Left = 536
Top = 314
Width = 211
Height = 283
VertScrollBar.Range = 273
HorzScrollBar.Range = 203
ActiveControl = ListBox
Caption = 'Form1'
Color = clBackground
PixelsPerInch = 120
TextHeight = 16
TextWidth = 7
object ListBox: TListBox
Left = 8
Top = 8
Width = 193
Height = 129
TabOrder = 0
end
object CreateButton: TButton
Left = 8
Top = 144
Width = 75
Height = 25
Caption = 'Create'
TabOrder = 1
OnClick = CreateButtonClick
end
object KillButton: TButton
Left = 128
Top = 144
Width = 75
Height = 25
Caption = 'Kill'
TabOrder = 2
OnClick = KillButtonClick
end
object Log: TMemo
Left = 8
Top = 184
Width = 193
Height = 89
ReadOnly = True
ScrollBars = ssAutoBoth
TabOrder = 3
end
end
<?xml version='1.0' encoding='utf-8' ?>
<!-- C++Builder XML Project -->
<PROJECT>
<MACROS>
<VERSION value="BCB.06.00"/>
<PROJECT value="ThreadCreate.exe"/>
<OBJFILES value="ThreadCreate.obj MainUnit.obj ThreadUnit.obj"/>
<RESFILES value="ThreadCreate.res"/>
<IDLFILES value=""/>
<IDLGENFILES value=""/>
<DEFFILE value=""/>
<RESDEPEN value="$(RESFILES) MainUnit.xfm"/>
<LIBFILES value=""/>
<LIBRARIES value=""/>
<SPARELIBS value="rtl.lib visualclx.lib"/>
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
indy.bpi bcb2kaxserver.bpi"/>
<PATHCPP value=".;"/>
<PATHPAS value=".;"/>
<PATHRC value=".;"/>
<PATHASM value=".;"/>
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
<RELEASELIBPATH value="$(BCB)\lib\release"/>
<LINKER value="ilink32"/>
<USERDEFINES value="_DEBUG"/>
<SYSDEFINES value="_RTLDLL;NO_STRICT;USEPACKAGES"/>
<MAINSOURCE value="ThreadCreate.cpp"/>
<INCLUDEPATH value="C:\Borland\CBuilder6\Projects;C:\src\xpdev\clx\ThreadCreate;$(BCB)\include;$(BCB)\include\vcl"/>
<LIBPATH value="C:\Borland\CBuilder6\Projects;C:\src\xpdev\clx\ThreadCreate;$(BCB)\lib\obj;$(BCB)\lib"/>
<WARNINGS value="-w-par"/>
<OTHERFILES value=""/>
</MACROS>
<OPTIONS>
<IDLCFLAGS value="-IC:\Borland\CBuilder6\Projects -IC:\src\xpdev\clx\ThreadCreate
-I$(BCB)\include -I$(BCB)\include\vcl -src_suffix cpp -D_DEBUG -boa"/>
<CFLAG1 value="-Od -H=$(BCB)\lib\clx60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c
-tW -tWM"/>
<PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M"/>
<RFLAGS value=""/>
<AFLAGS value="/mx /w2 /zd"/>
<LFLAGS value="-D&quot;&quot; -aa -Tpe -x -Gn -v"/>
<OTHERFILES value=""/>
</OPTIONS>
<LINKER>
<ALLOBJ value="c0w32.obj $(PACKAGES) Memmgr.Lib sysinit.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
<OTHERFILES value=""/>
</LINKER>
<FILELIST>
<FILE FILENAME="ThreadCreate.res" FORMNAME="" UNITNAME="ThreadCreate.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="ThreadCreate.cpp" FORMNAME="" UNITNAME="ThreadCreate" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="MainUnit.cpp" FORMNAME="Form1" UNITNAME="MainUnit" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="ThreadUnit.cpp" FORMNAME="" UNITNAME="ThreadUnit" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
</FILELIST>
<BUILDTOOLS>
</BUILDTOOLS>
<IDEOPTIONS>
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1033
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
[Debugging]
DebugSourceDirs=$(BCB)\source\vcl
[Parameters]
RunParams=
Launcher=
UseLauncher=0
DebugCWD=
HostApplication=
RemoteHost=
RemotePath=
RemoteLauncher=
RemoteCWD=
RemoteDebug=0
[Compiler]
ShowInfoMsgs=0
LinkDebugVcl=0
LinkCGLIB=0
[CORBA]
AddServerUnit=1
AddClientUnit=1
PrecompiledHeaders=1
[Language]
ActiveLang=
ProjectLang=
RootDir=
</IDEOPTIONS>
</PROJECT>
\ No newline at end of file
//---------------------------------------------------------------------------
#include <clx.h>
#pragma hdrstop
USEFORM("MainUnit.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch(...)
{
try
{
throw Exception("");
}
catch(Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
File added
//---------------------------------------------------------------------------
#include <clx.h>
#pragma hdrstop
#include "ThreadUnit.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in CLX can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TMyThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall TMyThread::TMyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
while(!Terminated) {
CriticalSection->Enter();
Log->Lines->Add(ThreadID);
CriticalSection->Leave();
Sleep(1000);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef ThreadUnitH
#define ThreadUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <SyncObjs.hpp>
//---------------------------------------------------------------------------
class TMyThread : public TThread
{
private:
protected:
void __fastcall Execute();
public:
TMemo* Log;
TCriticalSection* CriticalSection;
__fastcall TMyThread(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment