Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Thread

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 < [ 2 ]
000
04.05.2004, 18:30 Uhr
MasterThomsen



Ich habe hier ein Problem mit nem Thread. Mache das zu ersten mal, also habe fast keine Ahnung.

So erstelle ich mir meinen Thread:


C++:
#ifdef EEM_ENABLE
    if (mode != FREE_RUN && !(releaseJTAG))
    _beginthread(MSP430_PollState(NULL), 0, NULL);
#endif



Bereits bei der Funktion bekomme ich ein warning. Lasse ich "(NULL)" weg, wie ich dachte dass es richtig wäre, läufts gar nicht.

Meine Thread-Funktion schaut folgendermassen aus:


C++:
void MSP430_PollState(void *arg)
{
LONG state;
LONG CPUcycles;
LONG CurrentAddress;
LONG TraceValue;
LONG Value;

while(1)
{
  MSP430_State(&state, FALSE, &CPUcycles);

  #ifdef VW_ENABLE
   MSP430_EEM_Read_Register_Test(0x009B, &CurrentAddress);
   CurrentAddress >>= 8;
   MSP430_EEM_Write_Register(0x009A, CurrentAddress);

   MSP430_EEM_Read_Register_Test(0x009D, &TraceValue);
   TraceValue <<= 16;
   MSP430_EEM_Read_Register_Test(0x009D, &Value);
   TraceValue |= Value;
   CurrentAddress |= 0x03;
   MSP430_EEM_Write_Register(0x009A, CurrentAddress);
   MSP430_EEM_Read_Register_Test(0x009D, &Value);

   if (!(Value &= 0x0001))
    PostMessage((HWND)HandleDestWnd, (UINT)MessageID, VARIABLE_HIT, TraceValue);
  #endif

  if (state != RUNNING)
  {
   PostMessage((HWND)HandleDestWnd, (UINT)MessageID, state, CPUcycles);
   _endthread();
  }
}
}



Bei _endthread hängt sich das Programm irgendwie auf.

Meine Frage:
Wie kann ich den Thread deaktivieren wenn ich die Funktion grad net brauch und wie beenden wenn ich den nie wieder brauche?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.05.2004, 18:57 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nimm lieber CreateThread
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.05.2004, 19:25 Uhr
MasterThomsen



Damit kenn ich mich doch noch weniger aus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.05.2004, 19:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


gibt jede menge beispiele im forum einfach mal die suchfunktion benutzen

z.b. hier
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.05.2004, 10:58 Uhr
MasterThomsen



Hab den Thread jetzt folgendermassen aufgerufen:

C++:
h_Thread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MSP430_PollState(), 0, 0, NULL);



Bekomme aber ein Warning:

Code:
warning C4013: 'MSP430_PollState' undefined; assuming extern returning int



Ohne die Klammern hinter der Funktion bekomm ich nen Error:

Code:
error C2065: 'MSP430_PollState' : undeclared identifier



Was mach ich falsch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.05.2004, 11:23 Uhr
RHBaum



Die funktion, die deinen Thread erzeugen soll, kennt hoffentlich deine threadproc ?
Dein compiler beschwert sich, das er 'MSP430_PollState' (deine Funktion) ueberhaupt nicht kennt.
'MSP430_PollState' for dem Aufruf definiert ? oder korrect included ?

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.05.2004, 11:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Du solltest als letzten Parameter auch keine NULL übergeben, da es unter win98 und ss dazu führen kann das der Thread nicht gestartet wird wenn hier kein puffer übergeben wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.05.2004, 12:45 Uhr
MasterThomsen



Die Funktion 'MSP430_PollState' befindet sich in einer anderen Datei, deren Header includiert ist und ist in dem Header auch definiert.
Mit &ThreadID (DWORD) als letzten Parameter bekomme ich auch die selben Meldungen.
Das gleiche Problem hatte ich bereits mit _beginthread(...).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.05.2004, 13:41 Uhr
RHBaum




Zitat:

void MSP430_PollState(void *arg)


und wenn ich mal die definitionen such .... find ich in WINBASE.H

C++:
typedef DWORD (WINAPI *PTHREAD_START_ROUTINE)(
    LPVOID lpThreadParameter
    );
typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;


Das passt ned !
deine threadproc braucht als Rueckgabewert nen DWORD ....

Zitat:

undefined; assuming extern returning int



Und mit der Aufrufsynthax sollt er auch ned recht zufrieden sein ... WINAPI sollte zu __stdcall mutieren ....

zu deutsch, deklarier mal deine Threadproc so :
DWORD WINAPI MSP430_PollState(LPVOID arg)

Ciao ...

Dieser Post wurde am 05.05.2004 um 13:46 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.05.2004, 14:03 Uhr
MasterThomsen



Das funktioniert genau so wenig
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: