CreateThread - Probleme unter WindowsCE



  • Hallo ...

    Ich möchte unter WindowsCe in einer Anwendung in einem zusätzlich erzeugten Thread ein Textfile alle 5 sek. pollen.

    Ich habe den Thread innerhalb einer Klasse angelegt und aufgerufen.
    Jetzt habe ich aber das Problem, dass wenn der Thread aktiv ist, die gesamte Anwendungsoberfläche steht. Das soll natürlich nicht so sein, daher ja auch eigentlich der Thread. 😉
    Ich habe auch schon mal die Priorität des Threads herabgesetzt, aber gebracht hat das auch nix...

    Kann mir da vielleicht jmd. weiterhelfen, wie ich das entwedet mit dem Code unten machen kann oder eine andere Idee vorschlagen wie ich das Problem lösen kann?

    class CCSILogApp
    {
    public:
    
    	void PollingFile();
    
    	DWORD WINAPI ThreadProc(LPVOID lpParam);
    };
    
    void CCSILogApp::PollingFile()   // ruft Thread auf!!!!!
    {
    
    	HANDLE hThread = NULL;
    	DWORD dwThreadID = 0;
            BOOL result = FALSE;
    
    	hThread = CreateThread (NULL, 
                                     0, 
                                    (LPTHREAD_START_ROUTINE)ThreadProc(NULL),
                                     0, 
                                     0, 
                                    &dwThreadID); 
    
    	result = SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);
    }
    
    DWORD WINAPI CCSILogApp::ThreadProc(LPVOID lpParam) {
    
    	while(1) {  // Endet nie - das ist schon klar ;-)
    
    		// öffne, lese, schliesse FILE... etc.
    		Sleep(5000);
    	}
    
    	return 0;
    }
    


  • Hat da der Compiler nicht gemeckert? Du kannst keine nicht-statische Funktion der Klasse als Callback angeben. Mach die Callback "static" und übergib einen Zeiger auf die Klasseninstanz als Startparameter.



  • So ganz verstehen tue ich das momentan nicht, was ich da machen soll.
    A pro pos... Der Code ist so lauffähig bei mir wie ich ihn gepostet habe. Der Compiler hat nicht gemeckert!

    Könntest Du mir das ein bißchen näher mit Code erklären! Wäre echt super nett von Dir...

    Danke schonmal!



  • MarcusFrankfurt schrieb:

    A pro pos... Der Code ist so lauffähig bei mir wie ich ihn gepostet habe. Der Compiler hat nicht gemeckert!

    Wie soll er auch, wenn du ihm mit dem Cast den Mund verbietest?

    Das Problem ist, dass du nicht den Zeiger auf deine Threadfunktion übergibst, sondern den Rückgabewert, denn du benutzt ThreadProc(NULL), das ist kein Funktionszeiger, sondern ein Aufruf.

    Du startest also gar keinen Thread, sondern rufst ThreadProc direkt auf. Da ist es nicht weiter verwunderlich, dass der Rest der Anwendung hängt.

    Mach die Funktion static, und wenn der Compiler dein Programm ohne den Cast auf LPTHREAD_START_ROUTINE schluckt, dann kannst du von "lauffähig" reden.



  • Ahhh .. was habe ich denn da gemacht. 😕 😕

    Danke für den Hinweis und Deine Hilfe ;-))))


Anmelden zum Antworten