Thread Problem mit RS232

  • Themenstarter Themenstarter Tenor
  • Beginndatum Beginndatum
T

Tenor

Hallo!
Ich möchte gerne ein Programm schreiben, daß meine Gehäuselüfter regeln kann, da das dauerhaft passieren muß, muß das ganze ja in einem Thread erfolgen.
Die Ansteuerung der Lüfter erfolgt über die Serielle Schnittstelle, mithilfe der Port.dll.
Mit dieser kann ich die einzelnen Pins nach belieben setzen.
Nun zum Problem.

Die Lüfter laufen im Hauptthread problemlos. Ich kann sie an und ausschalten, und jeweils wird eine passende Meldung ausgegeben.(eine Regelung findet nicht statt (noch)).
Sobald ich mit einem Speed Button den Thread starte, was auch funktioniert, (es wird lediglich eine Zählschleife ausgeführt, die den wert in dem Caption feld eines Button wiedergibt), kann ich die Lüfter nicht mehr an bzw. ausschalten, je nach dem wann ich den knopf gedrückt habe.
Die Meldungen im Hauptthread werden weiter ausgegeben, das der Lüfter gestartet wurde, aber die Ansteuerung schlägt fehl!
Da bin ich absolut mit meinem Latein am ende, es wäre super wenn mir da jemand helfen könnte.
Den Aufbau des Threads habe ich aus einem Beispiel, also ich bin noch kein besonders guter Programmierer.

Danke schon mal

unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "com.cpp"
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include "Unit1.h"
#include "Unit2.h"
//#include <time.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool timer=true, pause=false;

void __fastcall TForm1::SpeedButton6Click(TObject *Sender)
{
FNewThread = new PWM(false); //Jetzt haben wir eine in der ganzen Klasse sichtbare Instanz.
FNewThread->OnTerminate = DeleteThread;
}

void __fastcall TForm1::DeleteThread(TObject* Sender)
{
FNewThread->Terminate();
}


unit1.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
TMemo *Memo1;
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
TSpeedButton *SpeedButton3;
TSpeedButton *SpeedButton4;
TSpeedButton *SpeedButton5;
TSpeedButton *SpeedButton6;
TTimer *Timer1;
TTimer *Timer2;
TSpeedButton *SpeedButton7;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall SpeedButton2Click(TObject *Sender);
void __fastcall SpeedButton3Click(TObject *Sender);
void __fastcall SpeedButton4Click(TObject *Sender);
void __fastcall SpeedButton5Click(TObject *Sender);
void __fastcall SpeedButton6Click(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall Timer2Timer(TObject *Sender);
void __fastcall SpeedButton7Click(TObject *Sender);
private: // Anwender-Deklarationen
TThread* FNewThread; //Vorfahrobject kann alle abgeleiteten Nachfahren transportieren.
void __fastcall DeleteThread(TObject* Sender);
public: // Anwender-Deklarationen
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


unit2.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

__fastcall PWM::PWM(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall PWM::Execute()
{
int b=0;
//---- Hier den Thread-Code plazieren----
Form1->Memo1->Lines->Add("-> Thread Arbeitet");
for (int i=0; i<20000; i++){ b=i;}
Form1->Memo1->Lines->Add (b);

}





das ist das wesendlichste da ich keine Datei anhängen kann.

Gruß

Tenor
 
Zurück