Struktur als Parameter dem _beginthreadex übergeben



  • Hallo,

    ich möchte bei meinem Threadaufruf, dem Thread als Parameter eine Struktur mitliefern deren Werte im Thread benötigt, gefüllt und auch zurückgegeben werden.

    hier mal die Struktur:

    typedef struct _data{
    	char			recvBuff[SCANBUFFERSIZE];	//wird gefüllt und zurückgegeben
    	int			buff_len;				//wird gefüllt und zurückgegeben
    	int			ping;					//wird gefüllt und zurückgegeben
    	int			id;					//wird im Thread ausgelesen
    	boolean		ok;					//wird gefüllt und zurückgegeben
    }data_t;
    

    die aufrufenden Funktionen sehen so aus:

    void Query_Thread(data_t *Data){
    	:
    	:
    	:
    	:
    	_endthreadex(0);
    }
    
    void  Query_Server(int value){
    
    	data_t			Data;
    	HANDLE		hThrd;
    	DWORD			Thrd_ID;
    
    	memset(&Data, 0, sizeof(data_t));
    	Data.id = value;
    	hThrd = (HANDLE)_beginthreadex(NULL, 0, (void *)Query_Thread, (void *)Data, 0, &Thrd_ID);
    	if(hThrd){
    		CloseHandle(hThrd);
    	}
    	:
    	:
    	:
    }
    

    Leider funktioniert das so nicht weil der Cmpiler bei der Übergabe von (void *)Data meckert, und sagt der cast geht so nicht. Wie muss ich das Ganze richtig machen? ich probier jetzt schon den ganzen Morgen rum und verzeifele langsam.



  • du weisst nicht was pointer sind. grundlagen ➡ ➡ ➡



  • Und wie wirds dann richtig gemacht, dein Antwort hat mal garnix geholfen.



  • void Query_Thread(data_t *pData)
    {
      // ...
      delete pData;
    }
    
    data_t            *pData; 
    pData = new data_t;
    // ...
    _beginthreadex(..., (void *)pData, ...);
    


  • Jochen Kalmbach schrieb:

    delete pData;
    

    Danke für die Antwort, aber was ist mit den Daten mit der ich die Struktur füllen und zurück geben möchte? Die Funktion die den Threat startet wartet auf die Daten.



  • qwas soll das denn bringen OPL. dann musst du das eben signalisieren mit event flag oder warten bis der thread fertig ist 👎



  • Dann löscht Du natürlich die Daten nicht im Thread, sondern wenn Du die Daten ausserhlab ausgewertet hast...


Anmelden zum Antworten