Utilizzare thread nella programmazione in vb6

Sto programmando per generare le chiavi in ​​esadecimale usando diverse funzioni casuali e scriverlo nel file di testo. Ho solo due pulsanti cmd e la barra di stato che mostra l’ora corrente e lo stato del processo. A questo punto, facendo clic sul pulsante cmd per la generazione di chiavi, il modulo viene bloccato e tutte le altre attività vengono sospese e persino il tempo viene sospeso fino al termine del processo. non posso nemmeno interrompere il processo nel mezzo. Voglio risolvere questo problema usando il thread, se ansible. come faccio a suggerire per favore Altrimenti, se esiste un altro metodo per risolvere questo problema, si prega di suggerire.

Grazie in anticipo del prezioso aiuto

L’unico modo “legale” per eseguire il multithreading in VB6 è tramite EXE ActiveX: basta usare l’opzione thread per object nella finestra di dialogo delle proprietà del progetto. Matt Curland ha un buon esempio di come convertire il tuo EXE standard in un EXE ActiveX multi-thread. Facendolo in questo modo, il debugger VB6 funziona senza crash perché nell’IDE tutto viene eseguito su un singolo thread.

Se si desidera ridurre il sovraccarico di multi-threading EXE ActiveX, è necessario utilizzare multi-threading in-proc non supportato ma comunque fattibile. Verifica multi-threading in-process compatto: un FolderWatcher con UI di esempio per un modo sicuro di utilizzare CreateThread e per inizializzare in modo sicuro il tempo di esecuzione VB6 sul nuovo thread (cortesia ancora Matt Curland).

Potresti voler controllare il suo libro Advanced Visual Basic 6 per maggiori dettagli.

È ansible utilizzare l’API Win32 CreateThread ma si tenga presente che il debugger VB6 non può gestire più thread.

Inoltre, se hai loop di qualsiasi tipo, prova a schiaffi “DoEvents” da qualche parte nel loop. Ridurrà drasticamente le prestazioni, ma i moduli saranno reattivi.

Potrebbe non essere ansible, ma potresti prendere in considerazione il passaggio a .NET, dove VB ha il pieno supporto per il threading.

Un altro approccio sfacciato (non molto buono, ma funziona) potrebbe fare a bada ad un exe per fare il lavoro, e fare in modo che il tuo VB6 scriva semplicemente per un file di risultati. Questo sarà un processo separato, quindi thread completamente isolati. Davvero disordinato, e io non lo consiglio.

È inoltre ansible avviare un processo figlio tramite CreateProcess e redirect gli stream StdIO per IPC. Anonymous Pipe I / O non è quasi l’hack che cerca di comunicare attraverso i file del disco.

Ci sono alcuni componenti gratuiti in giro per farlo.

http://www.xtremevbtalk.com/showpost.php?p=1304628&postcount=4

Credo che il metodo exe ActiveX di Matt Curland sia il metodo classico. In alternativa puoi usare DoEvents . O debind il lavoro a un exe ActiveX separato come questo . Sarebbe bello anche usare il componente .NET BackgroundWorker ma risulta che non funziona .