2010-08-15 6 views
2

Je suis en train de créer un programme de plateforme croisée qui intègre un petit serveur RARP (implémenté avec winpcap/pcap) et qui exécute 2 serveurs IP TCP. Je dois utiliser C++.communication de threads inter-asynchrone

Donc, je vais avoir au moins 4 threads, le principal qui compte le contrôleur, 2 socket asynchrone TCP/IP, et le serveur RARP.

J'ai prévu d'utiliser C++ BOOST Asio et Thread, parce que j'ai besoin d'exécuter ce programme dans Linux et Windows XP. (et je ne peux pas utiliser Qt)

Je voudrais effectuer une communication de thread Inter asynchrone.

Pour exemple les incendies dans une boucle sans bloquer la boucle

Comment puis-je faire? Avec une librairy portable de préférence.

Merci

+4

Je pense que vous aurez plus de chance d'obtenir une réponse si vous demandez une version plus étroite de cette question. Vous avez plusieurs questions ici, d'autres non liées aux autres ... C'est très dispersé. – SoapBox

Répondre

3

Il n'y a pas une solution générique, vous ne pouvez pas interrompre un fil et fournir une notification à traiter. Cela provoque d'horribles problèmes de ré-entrée et de grandes portions de blocage. Une notification ne peut être traitée que lorsque le thread est dans un état de repos.

Un système d'exploitation a généralement des services disponibles qui le rendent possible. Dans Windows, cela se fait généralement en postant un message dans la file d'attente des messages. Lu par la boucle de message, qui est l'état «inactif» pour un thread d'interface utilisateur. Ou en tirant parti des appels de procédure asynchrones, déclenchés lorsque le thread bloque et autorise explicitement l'exécution des APC. Mais vous l'avez coupé en exigeant une solution spécifique non plate-forme. Dans ce cas, vous êtes plutôt condamné à réinventer une fonctionnalité du système d'exploitation. Vous aurez besoin d'une file d'attente thread-safe que vous interrogez dans le thread qui doit recevoir la notification. Une file d'attente de messages, lue par une boucle de message.

+0

Parce que j'utilise déjà boost asio, im en utilisant l'objet boost asio io_service pour effectuer des appels de fonctions asynchrones. Je vous remercie. – MiniScalope

2

Jetez un oeil à ICE messaging

Il prend en charge la messagerie syncrhonous et asyncrounous entre les processus qu'ils soient sur le même nœud ou non.

Il existe des liaisons pour C++, Obj-C, Java, C#, Python, Ruby et PHP.