Mehrere Werte der Funktiuon _beginthreadex mit auf dem Weg geben



  • Guten Abend,

    ich möchte einen Thread starten dessen aufzurufende Funktion zwei Integerwerte bei der Übergabe erwartet in etwa so:

    void funktion_1(int zahl1, int zahl2){
    :
    	_endthreadex(1);	
    }
    
    void funktion2(void){
    	_beginthreadex(NULL, 0, (void *)funktion_1, (void *)(zahl1, zahl2), 0, &thread_id);
    }
    

    jedoch scheine ich das falsch zu machen, zahl2 ist in der Funktion immer 0. Wie muss ich das korrekt aufrufen? Danke.

    Manni



  • Erstell eine Struktur und allokiere diese via new. Gebe die Daten dann im Thread beim ende mit delete wieder frei.



  • Also wie ich eine Struktur in einer Headerdatei erstelle weiss ich, jedoch nicht so wie du er mir rätst. Kannst du mir vieleicht einen Bsp Code posten, danke.


  • Mod

    Du brauchst Dafür keinen Header!

    Auf korrekten Syntax habe ich nicht geprüft...

    struct SMYData
    {
    itn val1, val2;
    };
    
    ...
    unsigned funktion1(void *p)
    {
      SMYData *pData = static_cast<SMYData *>(p);
    ...
    }
    
    void funktion2(void)
    {
      SMYData data;
      data.val1 = 1;
      data.val2 = 2;
      _beginthreadex(NULL, 0, funktion1, &data, 0, &thread_id);
    }
    


  • Ehm, wärs nicht besser die SMYData variable so anzulegen, dass sie den Aufruf von funktion2 überlebt?
    z.B. mit new od. als Member der umschliessenden Klasse...


  • Mod

    simon.gysi schrieb:

    Ehm, wärs nicht besser die SMYData variable so anzulegen, dass sie den Aufruf von funktion2 überlebt?
    z.B. mit new od. als Member der umschliessenden Klasse...

    Extrem guter Hinweis! 🕶

    Sorry für meinen etwas hirnlosen Tipp...

    Korrktur:

    struct SMYData
    {
      SMYData(int i1, i2) : val1(i1), val2(i2) {}
      int val1, val2;
    };
    
    ...
    unsigned funktion1(void *p)
    {
      SMYData *pData = static_cast<SMYData *>(p);
    ...
      delete pData;
    ...
    }
    
    void funktion2(void)
    {
      _beginthreadex(NULL, 0, funktion1, new SMYData(1,2), 0, &thread_id);
    }
    

Anmelden zum Antworten