Pour utiliser le thread dans la programmation en vb6
Je suis de programmation pour générer des clés en hexadécimal en utilisant différentes fonction de lecture aléatoire et de l'écrire dans le fichier texte. J'ai seulement deux cmd boutons et la barre d'état qui affiche l'heure actuelle et l'état du processus. Maintenant en cliquant sur le bouton cmd pour keygeneration la forme est enfermé et tous les autres suspension de l'activité de qui est, même le temps est suspendu jusqu'à ce que le processus est terminé. je peux même pas annuler le processus entre les deux. Je veux résoudre ce problème en utilisant le fil, si possible. comment dois-je faire s'il vous plaît suggérer. Sinon si il y a une autre méthode pour régler ce problème s'il vous plaît suggérer.
Merci en prévision de l'aide précieuse
- LOL à l'origine des balises utilisées. Merci pour le correctif Marc. Bien posé la question autrement!
Vous devez vous connecter pour publier un commentaire.
La seule voie "légale" de faire du multi-threading dans VB6 est par le biais ActiveX Exe -- suffit d'utiliser le fil par l'objet de l'option sur le projet de dialogue des propriétés. Matt Curland a un bon exemple de comment faire pour convertir vos EXE Standard pour un multi-fileté ActiveX EXE. Cette façon de faire permet de VB6 débogueur à des œuvres w/o se bloque parce que dans l'IDE tout est exécuté sur un seul thread.
Si vous voulez réduire la surcharge de l'ActiveX EXE multi-threading, alors vous devez utiliser la proc multi-threading qui n'est pas pris en charge, mais reste faisable. Vérifier Compact Processus Multi-threading: Un FolderWatcher de l'échantillon de l'INTERFACE utilisateur pour un moyen de l'utiliser en toute sécurité CreateThread et à initialiser en toute sécurité VB6 moment de l'exécution sur le nouveau fil de discussion (avec l'aimable autorisation de Matt Curland de nouveau).
Vous pourriez vouloir vérifier son Advanced Visual Basic 6 livre pour plus de détails.
Vous pouvez utiliser le CreateThread API Win32, mais s'il vous plaît gardez à l'esprit que le VB6 débogueur ne peut pas gérer plusieurs threads.
Aussi, si vous avez des boucles de toutes sortes, essayez de gifles "DoEvents" quelque part dans la boucle. Il sera sévèrement coupé de retour sur le rendement, mais vos formes seront réceptifs.
Il ne serait pas possible, mais vous pourriez envisager de passer à .NET, où VB possède un support complet pour l'enfilage.
Un autre effronté approche (pas très bon, mais il fonctionne) pourrait à shell un exe pour faire le travail, et vous avez votre VB6 simplement sondage pour un fichier de résultats. Ce sera un processus distinct, donc complètement isolé thread(s). Vraiment salissant, et je ne le recommande pas.
Vous pouvez également démarrer un processus enfant via la fonction CreateProcess et rediriger l'StdIO flux pour l'IPC. Anonyme le canal d'e/S n'est pas près de le hack qui essaie de communiquer via les fichiers du disque serait.
Il y a quelques composants autour pour cela.
http://www.xtremevbtalk.com/showpost.php?p=1304628&postcount=4
Je crois que le Mat Curland ActiveX exe méthode est la méthode classique. Vous pouvez également utiliser DoEvents. Ou de déléguer le travail à un autre fichier exe ActiveX comme cette. Il serait agréable de vous pouvez également utiliser la .NET composant BackgroundWorker mais il s'avère que ne fonctionne pas.