Système.Le filetage.Fil de l'héritage
Est-il possible d'hériter de la classe Thread et remplacer la méthode de Démarrage?
Pourquoi voulez-vous? Qu'essayez-vous de réaliser?
J'avais jeter assez de bonnes chances de gagner, il veut juste passer un ou plus fortement typées paramètres de sa méthode.
S'il veut passer un seul fortement typé paramètre, il devrait se regarder dans le ParameterizedThreadStartDelegate passés au Fil ctor. Cette façon qu'il avait d'obtenir un type de Démarrage sûr de surcharge.
J'avais jeter assez de bonnes chances de gagner, il veut juste passer un ou plus fortement typées paramètres de sa méthode.
S'il veut passer un seul fortement typé paramètre, il devrait se regarder dans le ParameterizedThreadStartDelegate passés au Fil ctor. Cette façon qu'il avait d'obtenir un type de Démarrage sûr de surcharge.
OriginalL'auteur Dave | 2009-06-01
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que tout l'héritage pourrait entraîner un code plus lisible que celui-ci:
Avec assez étrange des objets que j'ai à jouer avec et de garder trace de l'intérieur du fil, il pourrait certainement. Je vais écrire un thread qui a pour charger dynamiquement une DLL et appeler des méthodes de l'API sur elle tout en répondant à des demandes en provenance du réseau. J'ai besoin de plus que juste une méthode pour mon fils; j'ai besoin d'une classe.
OriginalL'auteur CainKellye
Sujet de pourquoi quelqu'un voudrait pour ce faire: un grand nombre de langues (par exemple Java) et/ou le thread Api (par exemple, Qt) permettent aux développeurs de mettre en œuvre des threads en héritent d'un "fil" de la classe de base, puis de surcharger une méthode qui met en œuvre le fil de routine.
Avoir utilisé ce modèle largement en Qt, je trouve cela très pratique, au lieu d'avoir des threads cible d'une fonction ou d'une méthode, ce qui entraîne souvent bizarre et/ou compliquées code, le thread entier est contenu à l'intérieur d'un objet.
Voici un exemple de code utilisant l'API Qt:
QThread est Qt sur le filetage de la classe de base. Pour utiliser le MyThread, créer une instance de l'objet thread et appel QThread::start(). Le code qui apparaît dans le run() la remise à plat sera ensuite exécuté dans un thread séparé.
Ce qui est bien c'est que je pense qu'il vous permet de vraiment tout contenir un fil besoins à l'intérieur d'un objet unique, et (dans mon expérience), il en fait un ensemble très cohérent modèle d'objet. Je ne pense pas qu'il réponde aux besoins de tous, mais j'ai été un peu surpris que le C# n'est pas un modèle de thread pour être honnête.
Je certainement ne pas acheter que C#'s classe Thread est scellé en raison de noyau de complexité; si l'intervalle Qt peut fournir une croix-plate-forme de filetage bibliothèque qui permet à l'héritage de QThread, je vois pas vraiment de raison MSFT ne pouvais pas offrir la même capacité dans un filetage de classe en C#.
La vraie raison est qu'ils voulaient un wrapper mince. 🙂 Rien n'empêche quiconque de créer un meilleur emballage autour de l'officiel wrapper mince.
OriginalL'auteur user25967
OriginalL'auteur Nathan
Non, le
Thread
classe estsealed
. La justification de cette décision c'est que c'est un sujet délicat et faible niveau wrapper autour de l'objet de noyau que vous ne devriez pas jouer avec ça.Une question pour vous, pourquoi voulez-vous remplacer la méthode de Démarrage? Qu'essayez-vous de réaliser?
J'avais jeter assez de bonnes chances de gagner, il veut juste passer un ou plus fortement typées paramètres de sa méthode.
OriginalL'auteur Yann Schwartz
Pas sûr pourquoi vous pourriez vouloir faire cela (ou qui devraient le faire si c'était possible), mais il y a un moyen de contourner le fait que le
Thread
classe estsealed
- à l'aide de méthodes d'extension. Plus techniquement, c'est juste l'ajout d'une surcharge de laStart
méthode de groupe (plutôt que la suppression), mais qui peut encore être utile dans votre contexte.Quelque chose comme cela pourrait être ce que vous voulez:
Vous pouvez simplement appeler en tant que telle:
OriginalL'auteur Noldorin
La classe Thread est scellé, mais voici un bon site pour apprendre à propos des Threads. Aussi, jetez un oeil à la Stackoverflow fil ici : Le Multithreading de référence?
OriginalL'auteur Jean Azzopardi
Pas...
La classe Thread est scellé...
Grâce
OriginalL'auteur
Non, c'est une classe scellée qui signifie que vous ne peut pas hériter d'elle.
OriginalL'auteur CSharpAtl
Je suis également utilisé à l'aide de la même logique dans les applications Java, et il fait grave de sens pour regrouper un thread dans un objet qui ensuite sépare le début d'un nouveau processus de son parent. De même, très déçu C# ne prend pas en charge cette approche. Dave P
OriginalL'auteur