【问题标题】:Creating array of threads on Windows在 Windows 上创建线程数组
【发布时间】:2012-11-04 12:27:02
【问题描述】:

我正在尝试创建一个线程数组。在 Linux 中,我是这样做的:

pthread_t thr[MAXCONNECTIONS];

在 Windows 上,我找不到任何替代品。无论如何要创建一个数组或替代它的东西吗?

【问题讨论】:

  • 为什么不在 Windows 上也使用 pthreads。似乎有一个港口。
  • 我不知道。我认为您必须包含进程,然后使用 beginthread 和 endthread ...
  • @Tom:Windows 上的 pthreads 现在可用了吗?在图书馆?还是 Windows 支持它们?

标签: c windows multithreading


【解决方案1】:
HANDLE threads[ThreadCount];

for (int i=0; i < ThreadCount; ++i)
{
   threads[i] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, NULL, 0, &threadID );
}

我遗漏了一些东西,但你明白了。你有一个句柄数组而不是物理线程。然后,您可以将 HANDLE 传递给各种函数以在线程上执行操作。

WaitForSingleObject(threads[2], INFINITE );

【讨论】:

    【解决方案2】:

    假设你要创建 10 个线程

    包括这个:

    #include <Windows.h>
    #include <process.h>
    

    线程函数如下所示:

    DWORD WINAPI thread_1(LPVOID lpParam){ /* do something */; return 0; }
    

    数组和线程创建:

    HANDLE thr[10];
    thr[0] = CreateThread(NULL, 0, thread_1, NULL, NULL, NULL);
    ... etc for 1..9
    WaitForMultipleObjects(10, thr, TRUE, INFINITE);
    

    【讨论】:

      【解决方案3】:

      如果您有可能使用c++,更便携的解决方案是使用Boost threads 的数组(链接到Boost)。这将在 Linux 和 Windows 上使用相同的代码。

      您还可以使用c++11 std::thread 的数组,它也是可移植的。我不确定,但我知道 Windows 的 std::thread 尚未完成,因此使用 Boost 可能会更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多