• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wątki - argumenty

Object Storage Arubacloud
+1 głos
352 wizyt
pytanie zadane 17 października 2016 w C i C++ przez niezalogowany

Witam.

Mam problem dotyczący przekazywania wielu argumentów do wątku z biblioteki process.h, spróbowałem przekazać jako tablicę niestety jako tablicę odczytać w wątku tego nie mogłem, więc postanowiłem być sprytny i drugi argument odczytać dodając 1 do wskaźnika, niestety przy próbie dostępu do drugiego argumentu program się crashuje.

Kod rozpoczęcia wątku:

void * ArgumentyDlaInterpretera[2];
void * Argument1 = reinterpret_cast < void* > ( &Pakiety );
void * Argument2 = reinterpret_cast < void* > ( &PakietyDoWyslania );
ArgumentyDlaInterpretera[0] = Argument1;
ArgumentyDlaInterpretera[1] = Argument2;
 _beginthread(SG::InterpreterPakietow, 0, ArgumentyDlaInterpretera);

Kod ciała wątku:

void __cdecl InterpreterPakietow(void * args)
{
        void * Arg1 = args;
        void * Arg2 = args + 1;
        queue < sf::Packet > * PakietyOdListenera = reinterpret_cast < queue<sf::Packet>* > (Arg1);
        queue < sf::Packet > * PakietyDoWyslania = reinterpret_cast < queue<sf::Packet>* > (Arg2);
        //Dalszy kod
}

 

1 odpowiedź

0 głosów
odpowiedź 17 października 2016 przez Grzegorz Greg Krajew Nowicjusz (140 p.)

Hej,
Nie miałem styczności z process.h, a jedynie std::thread i tam na pewno mogłem podawać jako argumenty obiekt klasy/struktury za pomocą std::ref().
Np.:

struct BigData
{
   int data1;
   char data2;
};
int main()
{
   BigData data;
   data.data1 = 0;
   data.data2 = 'n';
   std::thread worker(foo, std::ref(data));
   worker.join();
   return 0;
}
// lub poprzez lambdę
void doIt(int a, char b)
{
   // job to do
}
int main()
{
   int a = -1;
   char b = 'n';
   std:thread worker ([=](){doIt (a, b); return 1;});
   worker.join();
   return 0;
}

Mam nadzieję, że nie popełniłem nigdzie błędu i byłem w jakimkolwiek stopniu pomocny,

pozdrawiam

komentarz 18 października 2016 przez niezalogowany

Niestety std::ref tutaj nie zadziałało, ale dzięki za odpowiedź.

Udało mi się to rozwiązać rzutując wskaźnik na void**, zamieszczam jakby ktoś miał podobny problem :D

void __cdecl InterpreterPakietow(void * args)
    {
        void ** Argumenty = (void**)args;
        void * Arg1 = Argumenty[0];
        void * Arg2 = Argumenty[1];
        queue < sf::Packet > * PakietyOdListenera = reinterpret_cast < queue<sf::Packet>* > (Arg1);
        queue < sf::Packet > * PakietyDoWyslania = reinterpret_cast < queue<sf::Packet>* > (Arg2);
        //Dalszy kod
    }

 

Podobne pytania

0 głosów
2 odpowiedzi 839 wizyt
pytanie zadane 9 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
2 odpowiedzi 3,927 wizyt
pytanie zadane 26 stycznia 2016 w C i C++ przez Krzysztof Fidyka Początkujący (320 p.)
+1 głos
1 odpowiedź 178 wizyt
pytanie zadane 23 maja 2015 w Rozwój zawodowy, nauka, praca przez Pan Kulomb Pasjonat (18,630 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...