[C++] Przekazywanie obiektu do nowego wątku

0

Witam,

Mam pewien problem z przekazaniem obiektu do nowego wątku przy pomocy f-cji CreateThread. Potrafię przekazać jedna zmienną, ale chodzi o to, aby przekazać więcej informacji. Czy jest to możliwe w poniższy sposób?:

 

class Auto {
public:
string marka, model;
int rocznik;

};

DWORD WINAPI watek1(PVOID zmienna)
{
cout << "Poczatek watku\n";
cout << zmienna << "\n";
cout << "Koniec watku";

}

int main(int argc, char *argv[])
{
HANDLE w1;
Auto a1;
a1.marka = "Audi";
a1.model = "A4";
a1.rocznik = 1996;
w1 = CreateThread(NULL,0,watek1,(PVOID)&a1,0,NULL);

getch();
return 0;

}

 

W efekcie przekazuje tylko adres obiektu a1 (0x28ff10) ale czy ja w ogóle dobrze rozumuję ? W jaki sposób mam przekazać obiekt a1 wraz z jego własnościami do nowego wątku?

0

Zdaje mi się, że chodzi tu o to:

  • zmienna to adres obiektu (wskaźnik na obiekt),
  • ...a do samego obiektu można odwołać się poprzez *zmienna.

Ew. do pól można odwoływać się w taki sposób: (Auto*)zmienna->marka (weź pole marka z obiektu, którego zmienna jest adresem).

0

trza zrobić coś w stylu:

DWORD WINAPI watek1(PVOID zmienna)
{
Auto* a= (Auto*)zmienna;

  cout << "Poczatek watku\n";
  cout << a->marka << "\n";
  cout << "Koniec watku";

}

1

Tak, ale trzeba pamiętać, żeby zmienna przekazywana do wątku siedziała na stercie, a nie na stosie, bo można się ostro przejechać - przestanie istnieć po wyjściu z zakresu jej obowiązywania, a wątek dalej na niej będzie próbował pracować. Więc nie Auto a1; tylko Auto *a1 = new Auto;

1 użytkowników online, w tym zalogowanych: 0, gości: 1