如何在Visual Basic中使用互斥锁

我导入了 kernel32 库。所以,我有 createMutex 函数可用,但我不确定各种参数和返回值。

这是经典的Visual Basic,不是Visual Basic.NET,但我可以用任何一种语言以答案的形式工作。

0
额外 编辑
意见: 1
xkcd的创始人Russell Munroe在他的书“What If”一书中有一章Lonelyiest Human。他试图回答“每个其他活着的人最远的人是什么?”他提名月球着陆时停留在月球轨道的阿波罗号宇航员,可能是一名孤立的波利尼西亚水手,也是斯科特南极考察队最后幸存的成员。
额外 作者 Gerry Myerson,
@GerryMyerson,我认为他现在由Randall去了。
额外 作者 The Masked Avenger,
@是的,我不知道我在想什么。兰德尔是。
额外 作者 Gerry Myerson,

7 答案

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.

(在不明确的情况下,我将他们的算法应用到被认为存在于R ^ 3内部的一组点上,这是因为沿着球体的距离和R ^ 3中的直线距离之间存在顺序保持关系。)

24
额外

让我们反复提出一个候选人,“迄今为止最孤单的人”,并且在每一步中,我们都会看到许多我们可以看到的并不孤单的人。

随机挑选一个人,并计算他们的“孤独感”。由于他们是第一个,他们默认情况下是迄今为止最孤单的人。

现在我们开始搜索一个新的候选人。随机挑选一个人,在我们目前记录的孤独中找到每个人。这个集合是空的,或者不是。如果它是空的,我们找到了一个新的孤独的人,计算他们的孤独,并继续。否则,将该球中的每个人都标记为开心,这意味着我们将他们从我们随机抽样的人群中移除(但不是从未来的任何孤独计算中)。

这最终找到了最孤单的人。

在我们考虑这是多高效之前,让我们进行优化。可选地,假装世界是一个圆环(遵循一个优良的传统;阿诺尔德的经典力学在讨论天气预报时在脚注中做了这个)。像往常一样,这不是必需的。

现在,在我们开始之前,将每个人分成两个列表,一个是纬度和一个经度。我们现在可以使用它来有效地找到某个半径范围内的所有人,而无需评估每对成对距离。我们也可以改进另一个步骤,计算新候选人的孤独感。

最后,我再次想到,实际上算出这个算法的复杂性听起来像是过多的工作。 :-)

7
额外

这被称为计算几何中的“最大空圆问题”,并且只要给出点的凸包和相应的Voronoi图,就有一个O(n log n)解。有关此处的问题非常易读。

6
额外

有可能重新构造您的问题,以便“基于距离的异常值”算法适用。

2
额外

那么,基于文档,它看起来像:

  1. 安全属性(可以传递null)
  2. 它是否最初拥有(可传递false)
  3. 它的名称

HTH

0
额外

这里是 CreateMutex 的VB6声明 - 我刚刚复制他们来自API查看器,您应该将它们作为VB6安装的一部分。 VB6使用当前代码页将字符串编组为空值终止的ANSI。

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

请记住,如果您从VB6 IDE创建互斥锁,则该互斥锁属于IDE,并且在停止运行程序时不会被销毁 - 只有在关闭IDE时才会销毁。

0
额外

只需将点分成三角形的网格。如果群体称它为P,则整个球体(包括表面点)可以被划分为3。 (我为其他案例撰写了出版物,德国数学杂志第127.6期) 那么不要在该论文中描述每个千字节,现在可以在X向量空间中使用微积分,每个向量与另一个人距离一段距离。 U然后可以找到****最大***这样的三角形(3个向量)

0
额外
如果你明确提到有助于文献的文献,那么最好全文给予。 (我们鼓励用户使用他们的真实姓名,尽管这当然不是要求。)
额外 作者 Todd Trimble,