Comment utiliser un mutex dans Visual Basic

J'ai importé la bibliothèque kernel32 . Donc, j'ai la fonction createMutex disponible mais je ne suis pas tout à fait sûr des différents paramètres et des valeurs de retour.

C'est Visual Basic classique, pas Visual Basic.NET mais je peux probablement travailler avec l'un ou l'autre langage sous la forme d'une réponse.

0
Russell Munroe, créateur de xkcd, a un chapitre, Loneliest Human, dans son livre, What If. Il essaie de répondre: "Quel est le plus éloigné d'un être vivant?" Il nomme les astronautes d'Apollo qui sont restés dans l'orbite lunaire pendant un atterrissage de Lune, probablement un marin polynésien seul, et le dernier membre survivant de l'expédition antarctique de Scott.
ajouté l'auteur Gerry Myerson, source
@GerryMyerson, je pense qu'il passe par Randall maintenant.
ajouté l'auteur The Masked Avenger, source
@The, oui, je ne sais pas ce que je pensais. Randall c'est.
ajouté l'auteur Gerry Myerson, source

7 Réponses

This paper gives an O(n log n) algorithm for the "all-nearest-neighbors" problem: given a set of points S, find all the values m(p) where p is a point of S and m(p) is the minimum distance from p to a point of S \ {p}. Then the "loneliest point" is the point p which maximizes m(p). So your problem can be solved in O(n log n) time, which is pretty good.

(Si ce n'est pas clair, j'applique leur algorithme à l'ensemble des points considérés comme vivant à l'intérieur de R ^ 3, en utilisant le fait qu'il existe une relation préservant l'ordre entre la distance le long de la sphère et la distance rectiligne dans R ^ 3 .)

24
ajouté

Venons-en itérativement avec un candidat, « la personne loneliest jusqu'à présent », et à chaque mauvaise herbe étape sur des tas de gens qui nous pouvons voir ne sont pas aussi seul.

Choisissez une personne au hasard et calculez leur «solitude». Comme ils sont les premiers, ils sont par défaut la personne la plus solitaire jusqu'à présent.

Commençons maintenant la recherche d'un nouveau candidat. Choisissez une personne au hasard, trouvez tout le monde dans la solitude actuelle de notre record. Soit cet ensemble est vide, soit non. Si c'est vide, nous avons trouvé une nouvelle personne la plus solitaire, calculons leur solitude et continuons. Autrement, marquez tout le monde dans cette boule comme heureuse, ce qui signifie simplement que nous les retirons du groupe de personnes que nous échantillonnons au hasard (mais pas de tout calcul futur de la solitude).

Cela finit par trouver la personne la plus solitaire.

Avant de penser à quel point c'est efficace, faisons une optimisation. Optionnellement, prétendez que le monde est un tore (suivant une belle tradition, la Mécanique Classique d'Arnol'd le fait dans une note de bas de page en parlant de la prévision météorologique). Comme d'habitude, ce n'est pas essentiel.

Maintenant, avant de commencer, triez tout le monde en deux listes, une par latitude et une par longitude. Nous pouvons maintenant l'utiliser pour trouver efficacement tout le monde dans un certain rayon, sans avoir à évaluer chaque distance par paire. Nous pouvons également améliorer l'autre étape, en calculant la solitude d'un nouveau candidat.

Finalement, à la réflexion, j'ai décidé que travailler sur la complexité de cet algorithme semblait être trop de travail en ce moment. :-)

7
ajouté

C'est ce qu'on appelle le "plus grand problème de cercle vide" en géométrie computationnelle, et il existe une solution O (n log n) à condition que l'on vous donne la coque convexe des points et les diagrammes de Voronoi correspondants. Il y a un article très lisible sur le problème ici .

6
ajouté

Il est peut-être possible de reformuler votre problème afin que les algorithmes «s'appliquent».

2
ajouté

Eh bien, basé sur la documentation , il ressemble à :

  1. Attributs de sécurité (peut passer null)
  2. Si elle est initialement possédée (peut passer false)
  3. Le nom de celui-ci

HTH

0
ajouté

Voici les déclarations VB6 pour CreateMutex - Je viens de copier à partir de la visionneuse d'API, que vous devriez avoir dans le cadre de votre installation de VB6. VB6 marshalls chaînes à ANSI à terminaison nulle en utilisant la page de codes en cours.

Public Type SECURITY_ATTRIBUTES
   nLength As Long
   lpSecurityDescriptor As Long
   bInheritHandle As Long 
End Type

Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" _
   (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, _
    ByVal lpName As String) As Long

Gardez à l'esprit que si vous créez un mutex à partir de l'EDI VB6, le mutex appartient à l'EDI et ne sera pas détruit lorsque vous arrêtez d'exécuter votre programme - seulement lorsque vous fermez l'EDI.

0
ajouté

Il suffit de diviser les points en un maillage de triangles. toute la sphère, y compris les points de surface, peut être divisée en tant que telle si la population l'appelle P est divisible par 3. (J'ai écrit une publication pour les autres cas. Dans Deutschen Mathematica vol 127.6) alors, pour ne pas décrire tous les kilo-octets dans ce papier, vous pouvez maintenant utiliser le calcul sur X nombre d'espaces de vecteurs avec chaque vecteur une 'distance' d'une autre personne. U alors peut trouver le **** Maximum *** tel triangle (3 vecteurs)

0
ajouté
Si vous avez des références explicites à la littérature qui vous aideraient, il serait préférable de les donner en entier. (Nous encourageons les utilisateurs à utiliser leurs noms réels de toute façon, bien que ce ne soit bien sûr pas une exigence.)
ajouté l'auteur Todd Trimble, source