Threads & Error 6: Zugriffsnummer ist nicht definiert
-
Hi!
Ich habe eine Konsolenanwendung programmiert, die mehrere Threads benutzt. Ich bekomme immer diesen Fehler:<Uhrzeit>: Can not resume thread 0 (error 6: die Zugriffsnummer ist nicht definiert.)
Was hat das zu bedeuten???
-
Hmm, lass mal etwas Code sehen, wo genau tritt dieser Fehler auf?
MfG SideWinder
-
Ich benutze ein wxThread-Object aus der wxWindows library, dass ich etwas modifiziert habe um eine Callback-Funktion übergeben zu können...
ThreadObject.h
#ifndef __UUID_THREADOBJECT_H #define __UUID_THREADOBJECT_H #include <wx/thread.h> typedef void *ExitCode; extern wxMutex mutex; class ThreadObject : public wxThread { public: ThreadObject(void (*CllBckFunc)(void* userdata), void* userData); ~ThreadObject(); ExitCode Entry(); protected: void (*CallbackFunc)(void* userdata); void* UserData; }; #endif //__UUID_THREADOBJECT_H
ThreadObject.cpp
#include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "ThreadObject.h" #include <wx/thread.h> wxMutex mutex; ThreadObject::ThreadObject(void (*CllBckFunc)(void* userdata), void* userData) { CallbackFunc = CllBckFunc; UserData = userData; } ThreadObject::~ThreadObject() { } ExitCode ThreadObject::Entry() { CallbackFunc(UserData); Exit(); return 0; }
Der Code, der den Thread benutzt (Auszug)
void SimpleNetworkServer::Listen(void (*CllBckFunc)(SOCKET s)) { OnAccept = CllBckFunc; ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) throw SocketException(EXC_SOCKET_CREATE); nRet = bind(ListenSocket, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)); if(nRet == SOCKET_ERROR) throw SocketException(EXC_SOCKET_BIND); while(1) { printf("ANFANG!"); nRet = listen(ListenSocket, 10); if (nRet == SOCKET_ERROR) throw SocketException(EXC_SOCKET_LISTEN); ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) throw SocketException(EXC_SOCKET_ACCEPT); ThreadObject* thr = new ThreadObject(Launcher, this); thr->Run(); printf("ENDE!"); } } void Launcher(void* userdata) { SimpleNetworkServer* server = (SimpleNetworkServer*)userdata; void (*OnAccept)(SOCKET s) = server->OnAccept; OnAccept(server->ClientSocket); }
Ich habe das Thread-Objekt schonmal in einem anderen Projekt benutzt und es funktioniert perfekt. Hier kommt allerdings immer der Fehler. Es scheint aber auch nicht daran zu liegen, dass Sockets verwendet werden...