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


Anmelden zum Antworten