2013-05-01 4 views
0

j'étais utiliser C++ signauxsignaux en Java

sigaction

struct sigaction sigact; 

et définir tous les attributs d'utiliser des signaux

maintenant je veux l'utiliser en Java ce qui est l'équivalent en Java

au include "signal.h"

J'ai deux threads:

  1. une course depuis le début du programme

  2. et l'autre course au signal d'alarme

J'étais implémenter la fonctionnalité en C++ en utilisant des signaux comme indiqué et maintenant je veux mettre en œuvre en utilisant java

Modifié mettre mon objectif:

En fait, mon objectif est d'exécuter le deuxième thread Lorsque le signal arrive du premier thread

+2

Pourriez-vous décrire plus en détail ce que vous essayez d'accomplir? Les signaux ne sont peut-être pas le bon outil. – Mat

+0

@Mat - et si c'est le bon outil, alors Java est la mauvaise langue. –

+0

Pour 1) vous n'avez pas besoin de signaux. Pour 2) la solution habituelle est d'utiliser une liste de socket pour des commandes simples sur un certain port. –

Répondre

4

Cela ressemble à un "XY-Problem" typique.

En langage Java, vous n'avez pas accès au signal OS. Ils sont spécifiques à la plate-forme et Java tente d'être agnostique de la plate-forme. Aussi: appeler Java à partir d'un gestionnaire de signal avec JNI pourrait être "amusant" (comme expliqué dans Dwarf Fortress).

Vous devez donc retourner à la planche à dessin et réfléchir à quel problème vous voulez résoudre et cesser de penser à la façon de le résoudre avec des signaux.

Cela dit: si vous insistez sur les signaux et ne sont pas peur d'utiliser des trucs internes qui pourraient changer sur un coup de tête: Jetez un oeil à sun.misc.Signal.

EDIT Maintenant, la question a clairement indiqué que la signalisation a lieu au sein d'une machine virtuelle Java. Pour ces signaux sont certainement la mauvaise chose en Java. Donc, la solution la plus simple est de créer et de démarrer le deuxième thread directement à partir de l'intérieur du premier thread. Aucune signalisation requise.

La meilleure solution consiste à coder un « point de rendez-vous » à l'aide Object.wait() dans le deuxième filetage (en utilisant une instance de l'objet lui-même mais la Thread) et Object.notify()notifyAll() ou à partir du premier fil. La recherche de ces termes dans un didacticiel Java fera apparaître suffisamment d'exemples.