Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用C中的线程。简单的例子?_C_Windows_Multithreading_Semaphore - Fatal编程技术网

在Windows上使用C中的线程。简单的例子?

在Windows上使用C中的线程。简单的例子?,c,windows,multithreading,semaphore,C,Windows,Multithreading,Semaphore,我需要什么以及如何在Windows Vista上使用C中的线程 您能给我一个简单的代码示例吗?下面是关于如何在Windows上使用CreateThread()的详细信息 基本思想是调用CreateThread(),并向其传递指向线程函数的指针,该函数在创建目标线程后将在目标线程上运行 最简单的代码是: #include <windows.h> DWORD WINAPI ThreadFunc(void* data) { // Do stuff. This will be the

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

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

下面是关于如何在Windows上使用CreateThread()的详细信息

基本思想是调用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.
  }
}
#包括
DWORD WINAPI ThreadFunc(无效*数据){
//这将是在新线程上调用的第一个函数。
//当此函数返回时,线程将消失。有关详细信息,请参阅MSDN。
返回0;
}
int main(){
HANDLE thread=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL);
如果(线程){
//可以选择执行一些操作,例如等待线程。
}
}
您还可以选择调用-相同的基本思想,但如果需要,将为您执行一些shell类型初始化,例如初始化COM等。

您将使用该函数


你也提到了信号灯。为此,您可以使用原子操作和互斥锁。我使用CreateThread等,而不是pthread。

虽然这可能是一个简单的RTFM问题,但它不是一个真正的问题。毕竟,已经有几个真正的答案了。但是,请记住,如果你要在新线程中使用CRT,你可能需要非常小心。例如,在MSVC中,您应该使用_beginthread/_beginthreadex和_endthread而不是相关的API,以使CRT正确分配/取消分配其内部每线程结构。我想,在其他CRT中,它也应该是这样的。另外,如果你想在新线程上初始化COM,那么可以使用SyCaleTraceC++(),这似乎是一个C++示例(link)。这也适用于C吗?Win32是一个C api,所以,是的,它应该可以工作。@turmuka:在Win32上处理线程与使用pthreads略有不同;您获得的
句柄类似于pthread id,一旦您不再对等待它或获取其退出代码感兴趣,您就必须对其调用
CloseHandle
,因此您可以说
CloseHandle
类似于
pthread\u detach
pthread_join
作业在多个调用之间分割-使用
WaitForSingleObject
等待线程结束,
GetExitCodeThread
获取其退出代码(如果您关心它),并且在使用完句柄后,一如既往地使用
CloseHandle
。pthreads是否可用。在Windows和/或Visual Studio上?无pthread不能直接使用。在Windows和/或Visual Studio上。不过,您可以使用mingw和cygwin。