Vă mulțumim pentru susținere

Cum se utilizează un mutex în Visual Basic

Am importat biblioteca kernel32 . Deci, am funcția createMutex disponibilă dar nu sunt destul de sigură de diferiți parametri și valorile returnate.

Acest lucru este clasic Visual Basic, nu Visual Basic.NET, dar pot lucra, probabil, cu oricare dintre limbi, sub forma unui răspuns.

0
adăugat editat
Russell Munroe, creatorul xkcd, are un capitol, Lonelyest Human, în cartea sa, What If. El încearcă să răspundă: "Care este cea mai îndepărtată ființă umană de la fiecare altă persoană vie?" El numește astronauții Apollo care au rămas în orbită lunară în timpul unei aterizări la Lună, posibil un marinar polinezian singuratic și ultimul membru supraviețuitor al expediției Antarcticului lui Scott.
adăugat autor Gerry Myerson
@GerryMyerson, cred că merge acum de Randall.
adăugat autor The Masked Avenger
Da, nu știu la ce mă gândeam. Randall este.
adăugat autor Gerry Myerson

7 răspunsuri

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.

(În cazul în care nu este clar, le aplic algoritmul lor la setul de puncte văzute ca trăind în interiorul R ^ 3, folosind faptul că există o relație de conservare a ordinii între distanța de-a lungul sferei și distanța liniară în R ^ 3 .)

24
adăugat

Să încercăm în mod iterativ un candidat, "cel mai singuratic până acum", iar la fiecare pas să eliminăm o mulțime de oameni pe care îi vedem nu sunt la fel de singuri.

Alegeți o persoană la întâmplare și calculați-le "singurătatea". Din moment ce sunt primii, ei sunt, în mod implicit, cea mai singura persoană până acum.

Acum să începem să căutăm un nou candidat. Alegeți o persoană la întâmplare, găsiți pe toată lumea în cadrul singurătății noastre actuale. Fie acest set este gol, fie nu. Dacă e goală, am găsit o singură persoană singuratică, le-am calculat singurătatea și am continuat. În caz contrar, marcați pe toți cei din această minge ca fiind fericiți, ceea ce înseamnă doar că le eliminăm din grupul de oameni pe care îl încercăm la întâmplare (dar nu din orice calcule viitoare de singurătate).

Aceasta găsește în cele din urmă persoana cea mai singuratică.

Înainte de a ne gândi la cât de eficient este acest lucru, să facem o optimizare. Opțional, pretindeți că lumea este un torus (după o tradiție frumoasă, mecanica clasică a lui Arnold face acest lucru într-o notă de subsol în timp ce vorbim despre prognoza meteo). Ca de obicei, nu este esențială.

Acum, înainte de a începe, sortați pe fiecare în două liste, unul la latitudine și unul după longitudine. Acum putem folosi acest lucru pentru a găsi în mod eficient pe toată lumea într-o anumită rază, fără a trebui să evaluăm fiecare distanță de pereche. De asemenea, putem îmbunătăți celălalt pas, calculând singurătatea unui nou candidat.

În cele din urmă, pe celelalte două gânduri am decis că, de fapt, elaborarea complexității acestui algoritm pare să fie prea multă muncă chiar acum. :-)

7
adăugat

Aceasta se numește "cea mai mare problemă a cercului gol" din Geometria computațională și are o soluție O (n log n) cu condiția să vi se ofere coca convexă a punctelor și diagramele Voronoi corespunzătoare. Există o lucrare foarte ușor de citit despre această problemă aici .

6
adăugat

Este posibil să reformulați problema astfel încât să se aplice algoritmi " algoritmi externi ;

2
adăugat

Ei bine, pe baza documentație se pare că :

  1. Atributele de securitate (pot trece null)
  2. Fie că este inițial deținut (poate trece false)
  3. Numele acestuia

HTH

0
adăugat

Iată declarațiile VB6 pentru CreateMutex - tocmai am copiat le de la vizualizatorul API, pe care ar trebui să-l aveți ca parte a instalării dvs. VB6. VB6 marshalls șiruri de caractere ANSI terminat cu null terminat folosind pagina de cod curentă.

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

Rețineți că dacă creați un mutex din VB6 IDE, mutex-ul aparține IDE-ului și nu va fi distrus când nu mai rulați programul - numai când închideți IDE-ul.

0
adăugat

doar împărțiți punctele într-o rețea de triunghiuri. întreaga sferă, inclusiv punctele de suprafață, poate fi împărțită ca atare dacă populația o numește P este divizibilă de 3. (Am scris o publicație pentru celelalte cazuri în Deutschen Mathematica vol 127.6) apoi să nu descrieți fiecare kilobyte din această lucrare, puteți acum să utilizați calculul pe valoarea X a spațiilor vectorilor cu fiecare vector o "distanță" de la o altă persoană. U atunci puteți găsi **** *** *** astfel de triunghi (3 vectori)

0
adăugat
Dacă aveți referințe explicite la literatura care ar ajuta, ar fi mult mai bine să le dați în întregime. (Îi încurajăm pe utilizatori să utilizeze numele lor oricum, deși, desigur, nu este o cerință.)
adăugat autor Todd Trimble