2011-09-13 1 views
0

Je réalisation de concepts multi-threading à l'aide de fil de mise en commun pour ramasser les messages des files d'attente. Il est nécessaire que l'ID/numéro du thread qui prend un message particulier doit être accessible depuis l'extérieur de la méthode thread. Suppose s'il y a trois threads et qu'ils doivent récupérer 5 messages de la file d'attente. le premier thread récupère le premier message le traite et il est libéré. Pendant ce temps, le deuxième thread aurait pris un autre message et aurait commencé à le traiter (multi-threading). ici d'une autre méthode, je veux savoir quel thread prend réellement message1, et la consistance doit maintenir non seulement à l'intérieur de la fonction de filetage, mais dans toute l'application (à l'extérieur de la fonction de fil aussi). i ont mis en place le multi-threading comme suitobtenir l'identifiant de fil de fils dans la threadpool de méthode en dehors de threadprocessing

For m_intThread1 = 0 To m_stuTPConfig.intNumThreads - 1 
    ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf **MultiProcessMQ**), m_intThread1) 
    System.Threading.Thread.Sleep(1000) 
Next m_intThread1 'm_intThread 

Public Shared Sub MultiProcessMQ(ByVal state As Object) 
    Dim objParentProcess As New ParentProcess 
    objParentProcess.ProcessThread(CType(state, String)) 
    If Interlocked.Decrement(CInt(m_stuTPConfig.intNumThreads)) = 0 Then 
     m_asyncOpsAreDone.Set() 
    End If 'Interlocked.Decrement(CInt(m_stuTPConfig.intNumThreads)) = 0 
End Sub 'MultiProcessMQ() 

Public Sub ProcessThread(ByVal strThread As String) 
    intThrd = Convert.ToInt32(strThread) 
    Console.WriteLine("Parent Thread started " & strThread) 
End Sub 

Comment accéder à la variable strThread D'un autre méthode et maintenir ses consistency.This est nécessaire à des fins d'exploitation forestière.

Merci pour la mise en forme. Nous utilisons les services WCFMQAdapter qui permet de configurer l'application en fonction des files d'attente d'entrée et de sortie. une fois que je serai l'hôte de ce service ProcessThread le contrôle va à un autre fichier, par exemple un fichier service.vb dans laquelle toutes les opérations relatives au fil sont effectuées et ne revient jamais. L'utilisation réelle des threads ici consiste à enregistrer les détails du traitement sur un fichier dans le fichier service.vb. Maintenant, la méthode PROCESSTHREAD est appelée. Jusqu'à présent, les propriétés multithread sont maintenues. Une fois le service hébergé, comment transmettre ces informations de thread au service.vb. Ou devrait-il y avoir un concept de threading parent/enfant? Et, si j'obtiens un thread à l'aide de managedThreadId, les identifiants de threads dynamiques sont générés. Y a-t-il des chances de les obtenir et de les convertir en identifiants gérés par l'utilisateur? disons, au lieu du fil 21, fil 44, fil66, fil89 ........ pouvons-nous les convertir comme thread1, thread 2, thread 3, thread 4? Merci à l'avance :-)

Répondre

1

Vous pouvez utiliser System.Threading.Thread.CurrentThread.ManagedThreadId pour obtenir un identifiant unique pour chaque fil. Je l'utiliserais pour identifier vos discussions.

+0

Merci pour la réponse. J'ai été capable de récupérer l'identifiant unique de chaque thread. Mais quand il y a une transition entre les fichiers, l'identifiant du thread change. Existe-t-il d'autres options pour passer l'identificateur de thread qui sera unique, processus large, au lieu d'être unique, fichier sage – Ramya

+0

@Ramya - J'ai reformaté le code dans votre question et remarqué que vous passez avec succès le 'm_intThread1' (Integer) au nouveau thread comme 'state' (Object) et ensuite' strThread' (String) - les merveilles de VB.NET au travail permettant ces conversions! Je ne vois pas maintenant le problème que vous avez car chacun des trois blocs de code a effectivement accès à 'strThread' de toute façon. Pouvez-vous élaborer sur votre question? – Enigmativity

Questions connexes