/ 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
Threads i Borland Builder
Fra : René


Dato : 05-04-02 19:25

Hej

Jeg har et lille problem med at oprette en Thread med createthread, når jeg
prøver på at compiler understående kode, skiver compileren 'Member
functionmust be called or its address taken'

void TForm1::test(void *arg)
{
// CODE //
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD ThreadId;
HANDLE rc= NULL;

rc= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test, (LPVOID)0, 0,
(LPDWORD)&ThreadId);
SetThreadPriority(rc, THREAD_PRIORITY_BELOW_NORMAL);
}

Det ser ud til at jeg ikke har helt styr på det med at få den til at pege på
test proceduren, nogen der kan hjælpe mig med dette problem ?

På forhånd tak

Med Venlig Hilsen

René.



 
 
Ivan Johansen (05-04-2002)
Kommentar
Fra : Ivan Johansen


Dato : 05-04-02 23:06

René wrote:

> Jeg har et lille problem med at oprette en Thread med createthread, når jeg
> prøver på at compiler understående kode, skiver compileren 'Member
> functionmust be called or its address taken'


Er der en grund til at du ikke bruger klassen TThread? Jeg har aldrig
lavet threads på denne her måde, men det ser ud som om din thread
funktion er deklareret forkert. Prøv med dette:
DWORD WINAPI ThreadFunc( LPVOID )
{
// CODE //
}

Prøv også at bruge en & når du tager adressen på funktionen, selvom det
ikke burde være nødvendigt:
rc = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&test, (LPVOID)0,
0, (LPDWORD)&ThreadId);

Jeg håber at det hjælper dig.

Ivan Johansen


bop (06-04-2002)
Kommentar
Fra : bop


Dato : 06-04-02 12:29


"René" <rg@mailme.dk> wrote in message
news:3cadeb99$0$5283$edfadb0f@dspool01.news.tele.dk...
> Hej

Dav

> Jeg har et lille problem med at oprette en Thread med createthread, når
jeg
> prøver på at compiler understående kode, skiver compileren 'Member
> functionmust be called or its address taken'
>
> void TForm1::test(void *arg)
> {
> // CODE //
> }

test() skal være statisk. Er den det? Eller også skal den ikke være metode i
en klasse.

>
> void __fastcall TForm1::Button1Click(TObject *Sender)
> {
> DWORD ThreadId;
> HANDLE rc= NULL;
>
> rc= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test, (LPVOID)0, 0,
> (LPDWORD)&ThreadId);
> SetThreadPriority(rc, THREAD_PRIORITY_BELOW_NORMAL);
> }
>
> Det ser ud til at jeg ikke har helt styr på det med at få den til at pege

> test proceduren, nogen der kan hjælpe mig med dette problem ?

Det skulle være fuldstændigt korrekt det du har skrevet, hvis ellers test er
statisk som nævnt. Hvis du vil køre en ikke-statisk (eventuelt virtuel)
metode, må du give en pointer med til instansen og bruge den i test.
Tråd-klasser gør noget tilsvarende (detteher er kastet sammen for at give
dig en idé og altså ikke testet):

rc = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test, (LPVOID)this, 0,
(LPDWORD)&ThreadId);

og

DWORD WINAPI TForm1::test(LPVOID arg)
{
((TForm1*)arg)->nonStaticMember_Test();
}

>
> På forhånd tak
>
> Med Venlig Hilsen
>
> René.
>
>

Værsågod.

--
BopBop




René (06-04-2002)
Kommentar
Fra : René


Dato : 06-04-02 17:50

Hej..

Jeg takker mange gange for jeres forslag med 'bop's' forslag spiller det
bare maks, men endnu engang tak for hjælpen..

mvh René




Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste