|
| 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
på
> 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é
| |
|
|