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...