Hallo alle miteinander! ![Lächeln](https://entwickler-forum.de/core/images/smilies/smile.png)
Da ich hier neu bin, erst einmal ein paar Dinge über mich:
- ich programmiere seit ca. 3 Jahren (mit dem Borland C++ Builder 6)
- alles was ich über C++ weiß, habe ich mir in meiner Freizeit angelesen
(daher bitte ich euch um genaue Erklärungen von Fachbegriffen, etc.)
---
So, nun zum Thema:
Ich arbeite gerade an einem Programm, das mit einem TThread-Array arbeitet.
Ich habe also nur eine Unit (für den Thread) und verwende diesen Thread als Array
(10 Threads momentan in Verwendung - maximal 50 könnten es sein)
Bevor ich jetzt größere Anwendungen mit diesem Schema programmiere,
würde ich gern euere Meinung zu meinem Programmier-Stil bzw. dem Programm an sich hören.
(damit möchte ich verhindern, dass ich später viel Aufwand beim Fehlerausbessern habe)
Hier ein Beispiel-Projekt, was ich geschrieben habe um mein Thread-Schema zu demonstrieren:
(programmiert in C++ mit dem Borland C++ Builder 6)
MainUnit.cpp - Main Form Unit:
MainUnit.h - Main Form Header:
---
Beitrag zu lang - im nächsten Beitrag gehts weiter![eek!](https://entwickler-forum.de/core/images/smilies/eek.png)
---
![Lächeln](https://entwickler-forum.de/core/images/smilies/smile.png)
Da ich hier neu bin, erst einmal ein paar Dinge über mich:
- ich programmiere seit ca. 3 Jahren (mit dem Borland C++ Builder 6)
- alles was ich über C++ weiß, habe ich mir in meiner Freizeit angelesen
(daher bitte ich euch um genaue Erklärungen von Fachbegriffen, etc.)
---
So, nun zum Thema:
Ich arbeite gerade an einem Programm, das mit einem TThread-Array arbeitet.
Ich habe also nur eine Unit (für den Thread) und verwende diesen Thread als Array
(10 Threads momentan in Verwendung - maximal 50 könnten es sein)
Code:
1 Formular (Main) 2 Buttons (BtnStart, BtnStop) 1 Memo (AnzStatus) 10 Threads (TTrdTest; 10 Threads aktiv; maximal 50 Threads möglich)
würde ich gern euere Meinung zu meinem Programmier-Stil bzw. dem Programm an sich hören.
(damit möchte ich verhindern, dass ich später viel Aufwand beim Fehlerausbessern habe)
Hier ein Beispiel-Projekt, was ich geschrieben habe um mein Thread-Schema zu demonstrieren:
(programmiert in C++ mit dem Borland C++ Builder 6)
MainUnit.cpp - Main Form Unit:
Code:
/* MainUnit.cpp - Main Form Unit */ //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- #include "MainUnit.h" #include "ThreadTest.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- TMain *Main; //--------------------------------------------------------------------------- __fastcall TMain::TMain(TComponent* Owner) : TForm(Owner) { // Maximale Anzahl Threads TrdsMax = 50; } //--------------------------------------------------------------------------- // ########################################################################## // Main Formular OnClose Event // ########################################################################## //--------------------------------------------------------------------------- void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action) { for (int i = 0; i < TrdsMax; ++i) { // Threads beenden if (TrdTestHandle) { TrdTestHandle[i]->Terminate(); TrdTestHandle[i] = NULL; } } } //--------------------------------------------------------------------------- // ########################################################################## // Buttons // ########################################################################## //--------------------------------------------------------------------------- void __fastcall TMain::BtnStartClick(TObject *Sender) { Zeit = ::GetTickCount(); BtnStart->Enabled = false; // Threads Aktiv = 0, Thread Anzahl = 10 (Max: 50) TrdsActive = 0, TrdCnt = 10; for (int i = 0; i < TrdCnt; ++i) { // Threads starten (ID des Threads) TrdTestHandle[i] = new TTrdTest(i+1); } } //--------------------------------------------------------------------------- void __fastcall TMain::BtnStopClick(TObject *Sender) { Zeit = ::GetTickCount(); BtnStop->Enabled = false; for (int i = 0; i < TrdCnt; ++i) { // Threads beenden if (TrdTestHandle[i]) { TrdTestHandle[i]->Terminate(); TrdTestHandle[i] = NULL; } } } //--------------------------------------------------------------------------- // ########################################################################## // Thread Status - Public Methode - Aufruf nur aus den Threads! // ########################################################################## //--------------------------------------------------------------------------- void __fastcall TMain::ThreadStatus(int TrdID, int Status) { if (Status == 1) // Thread AN { // Anzahl aktiver Threads TrdsActive++; // Status anzeigen AnzStatus->Lines->Add("Threads: " + String(TrdsActive) + " - TrdID: " + String(TrdID)); if (TrdsActive == TrdCnt) // alle Threads sind AN { BtnStop->Enabled = true; AnzStatus->Lines->Add("---"); AnzStatus->Lines->Add("Threads gestartet. (" + String(::GetTickCount() - Zeit) + " ms)"); AnzStatus->Lines->Add("---"); for (int i = 0; i < TrdCnt; ++i) { AnzStatus->Lines->Add("Thread Counter " + String(i) + ": 0"); } } } else if (Status == 0) // Thread AUS { if (TrdsActive == TrdCnt) { AnzStatus->Lines->Add("---"); } // Anzahl aktiver Threads TrdsActive--; // Status anzeigen AnzStatus->Lines->Add("Threads: " + String(TrdsActive) + " - TrdID: " + String(TrdID)); if (TrdsActive == 0) // alle Threads sind AUS { BtnStart->Enabled = true; AnzStatus->Lines->Add("---"); AnzStatus->Lines->Add("Threads gestoppt. (" + String(::GetTickCount() - Zeit) + " ms)"); AnzStatus->Lines->Add("---"); } } } //--------------------------------------------------------------------------- // ########################################################################## // Thread Counter - Public Methode - Aufruf nur aus den Threads! // ########################################################################## //--------------------------------------------------------------------------- void __fastcall TMain::ThreadCounter(int TrdID, int Counter) { // Wert des Zählers anzeigen (Wert = Durchläufe pro Sekunde) AnzStatus->Lines->Strings[(TrdCnt - 1) + 3 + TrdID] = "Thread Counter " + String(TrdID) + ": " + String(Counter); } //--------------------------------------------------------------------------- // ########################################################################## // Thread ERROR - Public Methode - Aufruf nur aus den Threads! // ########################################################################## //--------------------------------------------------------------------------- void __fastcall TMain::ThreadError(int TrdID, String Error) { AnzStatus->Lines->Add("---"); // Error anzeigen AnzStatus->Lines->Add("Thread: " + String(TrdID) + " - Error: " + Error ); AnzStatus->Lines->Add("---"); } //---------------------------------------------------------------------------
Code:
/* MainUnit.h - Main Form Header */ //--------------------------------------------------------------------------- #ifndef MainUnitH #define MainUnitH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TTrdTest; // Forward-Deklaration des Threads //--------------------------------------------------------------------------- class TMain : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *BtnStart; TButton *BtnStop; TMemo *AnzStatus; //------------------------------------------------------------------- //--- Main Formular OnClose Event //------------------------------------------------------------------- void __fastcall FormClose(TObject *Sender, TCloseAction &Action); //------------------------------------------------------------------- //--- Buttons //------------------------------------------------------------------- void __fastcall BtnStartClick(TObject *Sender); void __fastcall BtnStopClick(TObject *Sender); //--------------------------------------------------------------------------- private: /* Variablen-Deklarationen */ // Thread Handles TTrdTest *TrdTestHandle[50]; // maximal 50 Threads // Anzahl aktiver Threads, Threads maximal int TrdsActive, TrdCnt, TrdsMax; // Zeit Start - Ende int Zeit; //--------------------------------------------------------------------------- public: // Methoden-Deklarationen // Konstruktor __fastcall TMain(TComponent* Owner); // Thread AN / AUS - Aufruf nur aus den Threads! void __fastcall ThreadStatus(int TrdID, int Status); // Werte aus den Threads - Aufruf nur aus den Threads! void __fastcall ThreadCounter(int TrdID, int Counter); // Thread ERROR - Aufruf nur aus den Threads! void __fastcall ThreadError(int TrdID, String Error); }; //--------------------------------------------------------------------------- extern PACKAGE TMain *Main; //--------------------------------------------------------------------------- #endif
Beitrag zu lang - im nächsten Beitrag gehts weiter
![eek!](https://entwickler-forum.de/core/images/smilies/eek.png)
---
Comment