Mehrere Threads in einer Klasse



  • Hey!

    Ist es eigentlich erlaubt, zB. sowas zu machen:

    static unsigned long __stdcall threadDummy(void* instance)
    	{
    		static_cast<SlowBob*>(instance)->Tick();
    		return 0;
    	}
    
    	static unsigned long __stdcall threadDummy2(void* instance)
    	{
    		static_cast<SlowBob*>(instance)->Tick2();
    		return 0;
    	}
    
    	void Tick();
    	void Tick2();
    

    Und das innerhalb einer Klasse. Rennen auch gleichzeitig.

    Denn irgendwie hab ich Probleme. Thread 1 ruft jede Sekunde eine Funktion auf, welche beim ersten Durchgang eine MessageBox zeigt und ein flag setzt, damit die MessageBox nicht mehr angezeigt wird.
    Aber wenn ich den Thread starte, wird die MessageBox zwei mal angezeigt!

    Also sozusagen:

    if(flag)
    {
    MessageBox(0, 0, 0, 0);
    flag = false;
    }

    Das verstehe ich nicht... Die MessageBox dürfte doch nur einmal erscheinen, das ist doch sichergestellt?!
    MfG



  • Ach ich Trottel hab CreateThread zweimal aufgerufen, voll übersehen.

    Naja, trotzdem stimmt irgendwas mit dem Verhalten nicht. Also darf man mehrere Threads in eine Klasse packen?

    MfG



  • natürlich, das eine hat nichts mit dem anderen zu tun. du musst nur aufpassen daß deine threads sich ned gegenseitig in die quere kommen und gleichzeitig auf irgendwelche variablen zugreifen.



  • Jo, das ist mir klar. Ok, danke.



  • Threads und Klassen sind komplett unverwandte Prinzipien. Anders gesagt: das eine hat mit dem anderen nix zu tun.

    Der Grund warum dein Code nicht so funktioniert wie du das erwartet hast ist einfach dass du den falschen Code geschrieben hast.
    Du musst "flag" schon bevor MessageBox zurückkehrt auf false setzen wenn du willst dass ein 2. Thread nicht noch eine MessageBox anzeigt während die erste noch sichtbar ist.

    Davon abgesehen musst du Zugriffe auf Variablen synchronisieren wenn die aus mehreren Threads Zugriffe machst. Was in deinem Code auch nicht vorkommt.



  • hustbaer schrieb:

    Du musst "flag" schon bevor MessageBox zurückkehrt auf false setzen wenn du willst dass ein 2. Thread nicht noch eine MessageBox anzeigt während die erste noch sichtbar ist.

    Davon abgesehen musst du Zugriffe auf Variablen synchronisieren wenn die aus mehreren Threads Zugriffe machst. Was in deinem Code auch nicht vorkommt.

    Danke, aber das ist mir klar. Es ging ja bei meinem Problem nur indirekt um zwei Threads. Jedenfalls funktioniert jetzt alles.


Anmelden zum Antworten