【发布时间】:2010-12-31 04:30:49
【问题描述】:
我需要什么以及如何在 Windows Vista 上使用 C 中的线程?
能给我一个简单的代码示例吗?
【问题讨论】:
-
虽然这可能是一个简单的 RTFM 问题,但它不是一个真正的问题。毕竟,已经有几个真正的答案了。
标签: c windows multithreading semaphore
我需要什么以及如何在 Windows Vista 上使用 C 中的线程?
能给我一个简单的代码示例吗?
【问题讨论】:
标签: c windows multithreading semaphore
这是关于如何在 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 等。
【讨论】:
HANDLE 类似于pthread id,一旦你不再对等待它或获取它的退出代码感兴趣,你必须在它上面调用CloseHandle,所以你可能会说CloseHandle 类似于@ 987654327@。 pthread_join 作业在几个调用之间拆分 - 使用 WaitForSingleObject 等待线程结束,使用 GetExitCodeThread 获取其退出代码(如果你关心它),并且一如既往地使用 CloseHandle 一旦你完成使用句柄.
您将使用CreateThread 函数。
您也提到了信号量。为此,您将使用CreateSemaphore。
【讨论】:
原子操作和互斥锁很好。我使用 CreateThread 等,而不是 pthreads。
【讨论】: