Ich benutze Strukturen in C++, und ich versuche, Zeiger in diesen Strukturen zu speichern, aber wenn ich versuche, diese Struktur in einem Thread zu verwenden, kann ich die Daten der Struktur nicht erhalten.Pthreads und Strukturen C++
struct threadData {
void* memPointer;
void* instructionPointer;
void* stackPointer;
int memsize;
};
void *worker_thread(void *arg) {
struct threadData *my_data;
my_data = (struct threadData *) arg;
cout<<"INSTRUCTION POINTER: "<<my_data->instructionPointer<<endl;
cout<<"MEMORY POINTER: "<<my_data->memPointer<<endl;
cout<<"STACK POINTER: "<<my_data->stackPointer<<endl;
cout<<"MEMORY SIZE: "<<my_data->memsize<<endl;
}
int main() {
pthread_t my_thread;
int ret;
struct threadData td = { calloc(1, 32), calloc(1000000, 64), calloc(34, 4),6475 };
ret = pthread_create(&my_thread, NULL, worker_thread, (void *) &td);
pthread_detach(my_thread);
//pthread_exit(NULL);
}
Aber wenn ich pthread_exit (NULL) nach pthread_detach verwenden kann ich die Informationen der Struktur in der Methode „worker_thread“ verwenden.
Wenn Sie C++ verwenden, warum verwenden Sie nicht einen Konstruktor, um Ihre Struktur zu initialisieren? Sie verwenden auch C-artige Umwandlungen und verwenden das Schlüsselwort 'struct', um auf Ihren Strukturtyp zu verweisen (was in C++ fast nie erforderlich ist). Das ist sehr C-wie C++ - Code ... – DaoWen
C++ 11 Implementierung von dem, was Sie versuchen zu tun: http://coliru.stacked-crooked.com/a/f0b3dadb23bd7bba – kfsone
@ kfsone Sie können Calloc Aufrufe noch ersetzen mit 'new char [x * y]' um es komplett C++ - like zu bekommen. Nur zur Vollständigkeit würde ich die zugewiesenen Daten freigeben/löschen. Sicher, es ist nicht notwendig hier, aber konsequenterweise vor dem Zerstören von zugewiesenem Speicher von vornherein zu denken könnte verhindern, dass Sie in Zukunft Speicherlecks erzeugen ... – Aconcagua