【问题标题】:Using threads in C on Windows. Simple Example? [closed]在 Windows 上使用 C 中的线程。简单的例子? [关闭]
【发布时间】:2010-12-31 04:30:49
【问题描述】:

我需要什么以及如何在 Windows Vista 上使用 C 中的线程?

能给我一个简单的代码示例吗?

【问题讨论】:

  • 虽然这可能是一个简单的 RTFM 问题,但它不是一个真正的问题。毕竟,已经有几个真正的答案了。

标签: c windows multithreading semaphore


【解决方案1】:

这是关于如何在 Windows 上使用 CreateThread() 的 MSDN sample

基本思想是你调用 CreateThread() 并传递一个指向你的线程函数的指针,一旦它被创建,它将在目标线程上运行。

最简单的代码是:

#include <windows.h>

DWORD WINAPI ThreadFunc(void* data) {
  // Do stuff.  This will be the first function called on the new thread.
  // When this function returns, the thread goes away.  See MSDN for more details.
  return 0;
}

int main() {
  HANDLE thread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
  if (thread) {
    // Optionally do stuff, such as wait on the thread.
  }
}

您也可以选择调用SHCreateThread()——基本思路相同,但如果您提出要求,它会为您做一些 shell 类型的初始化,例如初始化 COM 等。

【讨论】:

  • 但是请记住,如果您要在新线程中使用 CRT,您可能需要非常小心。例如,在 MSVC 中,您应该使用 _beginthread/_beginthreadex 和 _endthread 而不是相关 API,以让 CRT 正确分配/取消分配其内部的每个线程结构。我认为在其他 CRT 中也应该这样。
  • 此外,如果您希望它在新线程上为您初始化 COM,您可以使用 SHCreateThread() 等等。
  • 这似乎是一个 C++ 示例(链接)。这也适用于 C 语言吗?
  • Win32 是一个 C api,所以,是的,它应该可以工作。
  • @turmuka:在 Win32 上处理线程与使用 pthreads 略有不同;你得到的HANDLE 类似于pthread id,一旦你不再对等待它或获取它的退出代码感兴趣,你必须在它上面调用CloseHandle,所以你可能会说CloseHandle 类似于@ 987654327@。 pthread_join 作业在几个调用之间拆分 - 使用 WaitForSingleObject 等待线程结束,使用 GetExitCodeThread 获取其退出代码(如果你关心它),并且一如既往地使用 CloseHandle 一旦你完成使用句柄.
【解决方案2】:

您将使用CreateThread 函数。

您也提到了信号量。为此,您将使用CreateSemaphore

【讨论】:

    【解决方案3】:

    原子操作和互斥锁很好。我使用 CreateThread 等,而不是 pthreads。

    【讨论】:

    • pthread 是否可用。在 Windows 和/或 Visual Studio 上?
    • no pthreads 不能直接使用。在 Windows 和/或 Visual Studio 上。但是,您也许可以使用 mingw 和 cygwin。
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2014-01-23
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2012-01-11
    • 2014-01-17
    相关资源
    最近更新 更多