From 2252a102bc4d7f34e7d8dc97dbea37378128931c Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 21 May 2002 09:21:00 +0000 Subject: [PATCH] CLX TThread demo for BorCon. --- src/xpdev/clx/ThreadCreate/MainUnit.cpp | 40 +++++++ src/xpdev/clx/ThreadCreate/MainUnit.h | 29 +++++ src/xpdev/clx/ThreadCreate/MainUnit.xfm | 48 ++++++++ src/xpdev/clx/ThreadCreate/ThreadCreate.bpr | 122 ++++++++++++++++++++ src/xpdev/clx/ThreadCreate/ThreadCreate.cpp | 32 +++++ src/xpdev/clx/ThreadCreate/ThreadCreate.res | Bin 0 -> 876 bytes src/xpdev/clx/ThreadCreate/ThreadUnit.cpp | 38 ++++++ src/xpdev/clx/ThreadCreate/ThreadUnit.h | 21 ++++ 8 files changed, 330 insertions(+) create mode 100644 src/xpdev/clx/ThreadCreate/MainUnit.cpp create mode 100644 src/xpdev/clx/ThreadCreate/MainUnit.h create mode 100644 src/xpdev/clx/ThreadCreate/MainUnit.xfm create mode 100644 src/xpdev/clx/ThreadCreate/ThreadCreate.bpr create mode 100644 src/xpdev/clx/ThreadCreate/ThreadCreate.cpp create mode 100644 src/xpdev/clx/ThreadCreate/ThreadCreate.res create mode 100644 src/xpdev/clx/ThreadCreate/ThreadUnit.cpp create mode 100644 src/xpdev/clx/ThreadCreate/ThreadUnit.h diff --git a/src/xpdev/clx/ThreadCreate/MainUnit.cpp b/src/xpdev/clx/ThreadCreate/MainUnit.cpp new file mode 100644 index 0000000000..7989b3dae2 --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/MainUnit.cpp @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- + +#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); + } +} +//--------------------------------------------------------------------------- diff --git a/src/xpdev/clx/ThreadCreate/MainUnit.h b/src/xpdev/clx/ThreadCreate/MainUnit.h new file mode 100644 index 0000000000..7f33e93e48 --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/MainUnit.h @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- + +#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 diff --git a/src/xpdev/clx/ThreadCreate/MainUnit.xfm b/src/xpdev/clx/ThreadCreate/MainUnit.xfm new file mode 100644 index 0000000000..e18ba8fcbd --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/MainUnit.xfm @@ -0,0 +1,48 @@ +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 diff --git a/src/xpdev/clx/ThreadCreate/ThreadCreate.bpr b/src/xpdev/clx/ThreadCreate/ThreadCreate.bpr new file mode 100644 index 0000000000..e964e4a59b --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/ThreadCreate.bpr @@ -0,0 +1,122 @@ +<?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"" -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 diff --git a/src/xpdev/clx/ThreadCreate/ThreadCreate.cpp b/src/xpdev/clx/ThreadCreate/ThreadCreate.cpp new file mode 100644 index 0000000000..dffefe56b7 --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/ThreadCreate.cpp @@ -0,0 +1,32 @@ +//--------------------------------------------------------------------------- + +#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; +} +//--------------------------------------------------------------------------- diff --git a/src/xpdev/clx/ThreadCreate/ThreadCreate.res b/src/xpdev/clx/ThreadCreate/ThreadCreate.res new file mode 100644 index 0000000000000000000000000000000000000000..e468bf918a523af7a3091b3eec019fa7b1c1693c GIT binary patch literal 876 zcmb_bF;2uV5Zu5uH0X-!NlA%xEfPT&DWU*=!4q&17bzp%{pX4_DNahW&!C{N_=1_S z<GVnR5E7$|cgMT4j-psZBnQ2ZMEV8qXQ_UUo-EXs%Zo*7x<-<N1(?aW4bRVLMDR${ z#DEnk*ht^^DDWj1d<<CQdvWuBV70SaoMutGiQdh$Irgj8cBjDDZ=v0&8Qe@8>(;tv z|In#nuj{navMjJhZPaM_QfNJD4x+|BdQI?CM=$p}-Rz^@qE3JH8vXRJG5P7?`N>Z` z^;5UnYGuEjugCL0h&O2V;=F@MIaK@b1)ytaHG_$|4Ry9gjf8ce7r;f$G$71Q;+N=W zkSqKfCkk>9V-oqZ{(-ldmnrWs9vrd4up7|(OL>%gd5|Y?BhQEl(|f_AGs*KsxD~ub GnS25s111yz literal 0 HcmV?d00001 diff --git a/src/xpdev/clx/ThreadCreate/ThreadUnit.cpp b/src/xpdev/clx/ThreadCreate/ThreadUnit.cpp new file mode 100644 index 0000000000..8bb343dede --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/ThreadUnit.cpp @@ -0,0 +1,38 @@ + +//--------------------------------------------------------------------------- + +#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); + } +} +//--------------------------------------------------------------------------- diff --git a/src/xpdev/clx/ThreadCreate/ThreadUnit.h b/src/xpdev/clx/ThreadCreate/ThreadUnit.h new file mode 100644 index 0000000000..144ae0c88f --- /dev/null +++ b/src/xpdev/clx/ThreadCreate/ThreadUnit.h @@ -0,0 +1,21 @@ + +//--------------------------------------------------------------------------- + +#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 -- GitLab