Avatar billede mad_man Nybegynder
19. januar 2005 - 13:50 Der er 4 kommentarer og
1 løsning

Threads i classes

jeg har siddet lidt og leget med threads før, men ikke i klasser, og jeg har store problemer med at få dette til og virke.
jeg vil blive meget glad hvis der er nogle der kan fortælle mig hvordan neden stående kode kunne komme til og virke.

/madman


#include <iostream>
#include <stdlib.h>
#include <windows.h>

using namespace std;

class testclass {
public:
    void testfunction();
    DWORD WINAPI loop();
   
    int tal;
};

int main(int argc, char *argv[])
{
  testclass test;
  test.testfunction();
 
  system("PAUSE");   
  return 0;
}

void testclass::testfunction()
{
    tal = 5;
    CreateThread(0, 0, loop, (void*)NULL, 0, NULL);
}

DWORD WINAPI testclass::loop()
{
    while(1)
    {
        cout << tal << endl;
        Sleep(1000);
    }   
}
Avatar billede arne_v Ekspert
19. januar 2005 - 13:53 #1
Du kan ikke bruge en instans metode (en ikke static metode) som argument
til CreateThread.

Du bliver nødt til at bruge en dispatcher funktion.
Avatar billede arne_v Ekspert
19. januar 2005 - 13:54 #2
Eksempel:

#include <iostream>

using namespace std;

#include <windows.h>

DWORD __stdcall dispatcher(void *p);

class X
{
    private:
        int v;
    public:
    X(int v) { this->v = v; };
    void Doit() { cout << v << endl; };
    void Start() { HANDLE h = CreateThread(NULL,0,dispatcher,this,0,NULL);
                  WaitForSingleObject(h,INFINITE); }
};

DWORD __stdcall dispatcher(void *p)
{
    X *x = (X *)p;
    x->Doit();
    return 0;
}

int main()
{
    X *x = new X(123);
    x->Start();
    return 0;
}
Avatar billede mad_man Nybegynder
19. januar 2005 - 14:00 #3
dispatcher funktion ???
kunne man få et lille eksempel ?

/madman
Avatar billede mad_man Nybegynder
19. januar 2005 - 14:08 #4
ahh takker, kan se at min internet exploere ikke helt reagere på at opdatere siden =)

/madman
Avatar billede arne_v Ekspert
19. januar 2005 - 14:10 #5
:-)

og svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester