/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
AfxBeginTread() ???
Fra : Ukendt


Dato : 01-05-04 23:41

Hej NG

Til løsning af et skoleprojekt (at skrive en FTP client), trode jeg at jeg
skulle ud i noget multitreading, men med lidt hjælp her fra NG, fandt jeg en
løsning uden treading. Nu er jeg dog blevet nysgærig mht. treading, og vil
nu prøve at omskrive det så det benytter multitreading.

Jeg har dog lidt problemmer med at få oprettet en ny tread, og håber at en
af jer kan hjælpe mig lidt på vej. I første omgang vil jeg bare lave en
tread der skriver en linie til skærmen og selv terminere igen(bare for at
starte et sted), og mener derfor ikke jeg behøver at bekømre mig om synk.
mellem treadsene.

Jeg har instantieret et objekt hvor en af member funktionerne(DataCon) skal
oprette en ny tread, Den starter med at lave en strukt og fylle noget data i
strukten, for at kunne overføre disse data til den nye tread. Derefter
kaldes AfxBeginTread med navnet på den funktion som skal køres i treaden,
adressen på strukt med parametre osv.

Problemmet er at den ikke vil kendes ved navnet på funktionen
(Thread_Data_Con). I de tutorials jeg har læst har ligger funktionen i cpp
filen for klassen, men uden at dens prototype er med i h filen. Kan det være
rigtig???

Desuden har jeg ikke kunne finde helt ud af hvad LPVOID og lpvParam er for
nogle størelser, men går ud fra at det svare til Argc og Argv i main
funktionen, er dette korrekt???

Koden til funktionerne ses her under:

På forhånd tak

Bjarke

PS: kodes i Visual studio 6 som et consolprogram.



UINT Ccontrol::Thread_Data_Con(LPVOID lpvParam)
{
cout << "hej fra den nye thread";
return 0;
}

void Ccontrol::DataCon(int Port_nr, char* IP_nr)
{

Thread_Param Data_Con_Param;


Data_Con_Param.Port = Port_nr;
strcpy(Data_Con_Param.IP_addr, IP_nr);


AfxBeginThread(Thread_Data_Con, &Data_Con_Param, THREAD_PRIORITY_NORMAL, 0,
0);

}





 
 
Bertel Brander (02-05-2004)
Kommentar
Fra : Bertel Brander


Dato : 02-05-04 00:38

Hej,

Man kan ikke bruge en normal member funktion med AfxBeginThread,
men man kan bruge en static member function.

Hvis man vil kalde en member function kan man lave en static
funktion der kalder member funktionen. Man giver så en pointer
til objektet med som argument til denne static function:

class Whatever
{
public:
static int StaticFunc(LPVOID);
void IkkeStaticFunc();
void Start();
};

void Whatever::Start()
{
AfxBeginThread(StaticFunc, (LPVOID )this, HREAD_PRIORITY_NORMAL, 0, 0);
}

int Whatever::StaticFunc(LPVOID Param)
{
Whatever *P = (Whatever *)Param;
P->IkkeStaticFunc();
}


Du kan også putte en

Ccontrol *Me;

ind i Data_Con_Param, og så tilgå den ikke-static member
function gennem denne.

/b

Ukendt (03-05-2004)
Kommentar
Fra : Ukendt


Dato : 03-05-04 22:10

Mange tak
Det var lige det jeg manglede for at få skidtet til at virke.

Hilsen Bjasen



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste