2016-05-03 7 views
0

Meine Frage ist über das Multithreading in VB 6. Dies scheint eine veraltete Frage zu sein, da jetzt weniger Leute VB 6 verwenden.VB 6 Multithreading Verwirrung

Definitiv unterstützt die native VB 6 Multi-Threading nicht direkt. Also mache ich eine C++ - DLL und stelle eine Methode vor, die CreateThread aufruft, um einen Worker-Thread und einige andere Methoden zu erstellen, um den Thread zu steuern. Der Thread scheint in Ordnung zu sein.

Um wieder an die VB 6-Anwendung zu melden, übergebe ich zunächst Me.hWnd an die DLL und hook die WndProc vor dem Erstellen des Threads. Dann rufen Sie SendMessage an die WoWnd wo benötigt. Es scheint auch in Ordnung zu sein.

Ist diese Methode für die Verwendung von Multithreading in VB 6 stabil? Ich brauche wirklich deine Hilfe!

PS: Wie wäre es mit SHCreateThread API anstelle von CreateThread?

+0

Sie müssen 'SendMessage' auf dem Thread aufrufen, auf dem die' hWnd' erstellt wird. Was du tust, wird in dem Moment in Rauch aufgehen, wenn du es in Produktion bringst. (FYI, VB6 unterstützt Threading durch ActiveX-EXEs.) – wqw

+0

@wqw SendMessage (ich ändere es in PostMessage, um mögliche Blöcke zu verhindern) wird auf C++ - Thread statt auf dem 'UI' (oder Main) -Thread aufgerufen. Ich nehme an, die Nachricht wird über Threads gesendet. Warum denkst du, dass es nicht funktioniert? –

+0

Für einen Überblick (mit Links zu weiterem Lesen) wie VB6 Threading behandelt, siehe [this] (https://msdn.microsoft.com/en-us/library/aa261361 (v = vs.60) .aspx). "In-Process-Komponente" ist eine ActiveX-DLL. "Out-of-Process-Komponente" ist ein ActiveX-EXE. – BobRodes

Antwort

0

Ich bin mir nicht sicher über Ihre. DLL-Ansatz, aber es gibt tatsächlich ein bisschen einen Trick, den Sie in VB6 verwenden können, um zusätzliche Threads zu erstellen, Art. Wenn Sie ein Timer-Objekt auf Ihrem Formular ablegen, legen Sie es fest, z. B. 1 ms, um das Ereignis zu starten, das in einem separaten Thread ausgelöst wird. Von dort können Sie alle anderen Funktionen aufrufen, die Sie benötigen. Ich habe diesen Trick häufig am Tag für die Hintergrundverarbeitung und so weiter verwendet.

Pro Tipp: Deaktivieren Sie den Timer sofort sobald es feuert oder Chaos wird folgen.

+0

Timer schalten auf denselben Thread. Ich bin positiv. – wqw

+0

Es ist in der Lage, den Thread auf diese Weise zu starten, aber nicht in der Lage, es danach zu steuern. –

+0

@guanboshen Kein Thread wird mit VB6-Timersteuerelementen gestartet. – wqw