代码之家  ›  专栏  ›  技术社区  ›  dlras2

在多线程VB6中使用mutex

  •  1
  • dlras2  · 技术社区  · 15 年前

    我正在更新用VB6编写的遗留代码,我发现需要一个互斥锁。我有两个插座,我需要从不同的来源发送和接收。所以我计划让一个套接字持续监听传入的连接,然后另一个用于发送或接收。

    计时器每秒检查20次是否有连接进入,如果是,则使用第二个套接字接受它,然后立即开始再次侦听。如果第二个连接在第一个连接接收完数据之前进入,它需要等待(在C中,我会对它抛出一个锁,并称之为done)

    发送 数据,我将使用第二个套接字,并连接到远程主机。因此,如果第二个套接字已经接收到数据,它也需要阻塞。

    Tick 事件总是和其他事件在同一个线程上引发?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Community CDub    8 年前

    Tick事件总是在同一个线程上引发。因为只有一个线程,所以所有的东西都会自动阻塞。

    在我看来,VB6中的多线程处理除了 using ActiveX EXE项目:有 various hacks 让多线程工作,但他们听起来肮脏的我,虽然其他人发誓他们。

        2
  •  3
  •   Kris Erickson    15 年前

    如果您使用标准的VB6 winsock控件,您甚至不必担心使用计时器,当建立连接时(是的,在主线程上)会触发事件。对于“锁”,您必须非常小心的唯一一件事是,如果您的代码中有DoEvents,那么您可能会陷入一种糟糕的情况,因为这会导致消息循环,并且您可以在调用DoEvents的函数中间运行其他函数的代码。如果您需要DoEvents来保持程序的“响应性”,那么您可以使用简单的布尔作为锁,因为VB6不是多线程的。MarkJ是正确的,为了使VB6在不使用activexe项目的情况下成为多线程的,您必须走很远的路,做一些非常粗略的事情。

    推荐文章