Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Thread soll Items in ListView erstellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.10.2006, 15:38 Uhr
www.pat



Hi!
Ich benutze Microsoft Visual Studio .NET 2003 (VC++)

Ich will Strings aus der seriellen Schnittstelle einlesen und in ein ListView adden.
Wegen den Timeouts des habe ich einen neuen Thread gemacht, in dem ich die Daten aus der Schnittstelle einlese.
Da ich mit Threats noch keine Erfahrung habe blicke ich nicht durch, wie ich dem neuen Thread einen Zeiger, oder sonstwas übergeben kann.

Den Quellcode zum Erstellen des Threads habe ich etwas verändert (Original von www.CodeProject.com)


C++:
long ComPort::StartScanner (void)
{
                DWORD dwThreadId = 0;
                m_hThread = ::CreateThread(    0,
                                            0,
                                            GetIDs,
                                            LPVOID(this),
                                            0,
                                            &dwThreadId);

        return 0;
}
DWORD WINAPI ComPort::GetIDs (LPVOID lpArg)
{
    // Route the method to the actual object
    ComPort* pThis = reinterpret_cast<ComPort*>(lpArg);
    return pThis->GetIDs();
    return 0;
}

DWORD ComPort::GetIDs (void)
{
    // Das will ich erreichen:
    Form1->listView1->Items->Add("Test: Gruß von GetIDs",0);  
}



Wenn ich an dem Code etwas verändere, also hier mal ein DWORD zu nem &RecievedData
funktioniert es nicht mehr.

Kann mir bitte jemand sagen welcher Parameter dafür zuständig ist?
Und wie nimmt der Thread den Zeiger entgegen?
So etwa?


C++:
DWORD ComPort::GetIDs (void,char* meinZeiger)
{
//...
}



Vielen Dank für die Aufmerksamkeit!

Gruß

pAT

Edit: Schönheitsfehler weggemacht...

Dieser Post wurde am 29.10.2006 um 17:53 Uhr von FloSoft editiert.
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.10.2006, 16:58 Uhr
www.pat



Oder wäre _beginthread( ThreadProc,0,&val); besser?
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.10.2006, 11:25 Uhr
www.pat



Habs hingekriegt:

Code aus Form1.cpp:

C++:
long Form1::StartScanner (void)
{

ThreadStart *myThreadDelegate = new ThreadStart(this, GetIDs);
    trd = new Thread(myThreadDelegate);
    trd->IsBackground = true;
    trd->Start();
    
        return 0;
}

void Form1::GetIDs()
{    
   while (true)
   {
     this->listView1->Items->Add("GetIDs alive..",0);  //Debug-Hilfe
     Thread::Sleep(1000);  
   }



die Header:



C++:
    public: void GetIDs();
    private: Thread *trd;
    
    public: long StartScanner (void);





Wenn man den Thread beenden möchte benutzt man:



C++:
    if (trd->IsAlive)
    trd->Abort();



Ich hoffe es hilft jemandem weiter.
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.10.2006, 11:29 Uhr
www.pat



Inzwischen stehe ich vor einem neuen Problem:
ich muss eine ComboBox auslesen und in einen char* schreiben:


C++:
   char* PortName;
   String * tempStr;
   tempStr = this->comboBox1->Text->ToString();
            
   PortName= Mach aus "tempStr" einen (char*) ;



hat da jemand einen Denkanstoß? Ich google seit Stunden nach Befehlen...
Oder soll ich für dieses Problem einen neuen Thread aufmachen?

Dieser Post wurde am 25.10.2006 um 11:33 Uhr von www.pat editiert.
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.10.2006, 18:53 Uhr
xXx
Devil


Öhm was sind das für komische Klassen die du da verwendest? sind alles keine C++ bzw WinAPI Klassen soweit ich das so überblicke ... hmm ist tempStr ein std::string oder was? dann wäre es c_str() ... oder was soll des sein`?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.10.2006, 22:40 Uhr
Spacelord
Hoffnungsloser Fall


http://msdn2.microsoft.com/de-de/library/d1ae6tz5.aspx

Gruß Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.10.2006, 09:30 Uhr
www.pat



hi!

Danke für die Antworten!

@ xXx:
Der String heißt System::String__gc*tempString
Ich hab keine große Ahnung wie man sowas nennt, ich weis nur, dass es im guten alten Konsolen-C++ viel bequemer war...

@Spacelord
Thx für den Link, den schau ich mir mal genauer an!

Jedenfalls hab ich gestern eine andere Lösung gefunden:


C++:
String * tempStr;
tempStr = this->comboBox1->Text->ToString();

char tempChar[255];

int charsOfStr=tempStr->get_Length();
            
for (int i=0; i<charsOfStr; i++)
tempChar[i]=static_cast<char>(tempStr->ToCharArray()[i]);

char* TempPortName;
TempPortName=tempChar;




Trotzdem Danke!!

Ich liebe dieses Smily ^^

Dieser Post wurde am 26.10.2006 um 09:31 Uhr von www.pat editiert.
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.10.2006, 15:19 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von pat:


C++:
int charsOfStr=tempStr->get_Length();
            
for (int i=0; i<charsOfStr; i++)
tempChar[i]=static_cast<char>(tempStr->ToCharArray()[i]);

char* TempPortName;
TempPortName=tempChar;




Naja,performant ist das ja nicht gerade.
Und warum machst du die Zuweisung von tempChar an TempPortName?
tempChar kannst du als char* benutzen.

Gruß Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 26.10.2006 um 15:20 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.10.2006, 16:33 Uhr
www.pat




Zitat von Spacelord:

Naja,performant ist das ja nicht gerade.


Was meinst du damit? Was genau ist unschön?
Der ganze Quellcode? Wenn du das meinst, als Noob muss man nehmen was man kriegt^^


Zitat von Spacelord:

Und warum machst du die Zuweisung von tempChar an TempPortName?
tempChar kannst du als char* benutzen.


K, da hast du recht. Als ich den Code reinkopiert habe war er noch etwas im "Ausprobier-Stadium". Sry für die schlechte Optimierung.

Dieser Post wurde am 26.10.2006 um 16:34 Uhr von www.pat editiert.
 
Profil || www.pat&">Private Message || www.pat&searchfor=author&startsearch=1&">Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.10.2006, 17:37 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von pat:

Was meinst du damit? Was genau ist unschön?
Der ganze Quellcode? Wenn du das meinst, als Noob muss man nehmen was man kriegt^^


Naja du rufst für jeden einzelnen Buchstaben die Methode ToCharArray auf.
Besser wäre es du würdest dir einmal das CharArray besorgen und dann per Index darüber laufen.

Gruß Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: