如何在VC ++中创建线程

时间:2009-02-02 22:37:44

标签: c++ windows visual-studio-2008

  • 在C语言编程时,我倾向于使用POSIX Threads Linux

  • 不使用 MFC

问题:

我如何在VC ++中创建线程?

在win32下查找有关线程的更多信息?

编辑:

  • 简要说明

我喜欢stackoverflow - 学生最好的资源!

此致

7 个答案:

答案 0 :(得分:10)

如果您正在寻找与平台无关的方法,请使用boost

还有beginthread()和beginthreadex()函数。两者似乎都是对Win32 API的补充,在某种意义上,在许多用例中,你仍然需要调用一些Win32函数(例如beginHrelex的CloseHandle)。所以,如果你对平台兼容性不太关心,你也可以削减前戏并使用CreateThread()。

Win32线程处理在此处记录:http://msdn.microsoft.com/en-us/library/ms684852(VS.85).aspx

[edit1]示例:

DWORD WINAPI MyThreadProc( void* pContext )
{
    return 0;
}

HANDLE h = CreateThread( NULL, 0, MyThreadProc, this, 0L, NULL );
WaitForSingleObject(h, TIME); // wait for thread to exit, TIME is a DWORD in milliseconds

[edit2] CRT&的CreateThread():

每个MSDN:

调用C运行时库(CRT)的可执行文件中的线程应使用_beginthreadex和_endthreadex函数进行线程管理,而不是CreateThread和ExitThread;这需要使用CRT的多线程版本。如果使用CreateThread创建的线程调用CRT,CRT可能会在内存不足的情况下终止进程。

答案 1 :(得分:3)

您不应使用原始Win32 CreateThread() API。

使用C运行时的_beginthreadex(),以便运行时有机会设置自己的线程支持。

答案 2 :(得分:3)

您可以使用CRT函数_beginthreadex()或Windows API函数CreateThread()。早期版本的VC ++需要_beginthreadex(),它有一个没有懒惰地初始化线程本地存储的CRT。 CreateThread()在VS2005及以上版本中都很好。

答案 3 :(得分:2)

您可能想看一下CreateThread()函数。

答案 4 :(得分:1)

关于这个主题的一些好书是Petzold的Programming Windows和Richter的Programming Applications for Windows.特别是,后者进入服务器端编程,如线程和同步API的深度。

编辑:对于代码段,Google就是您的朋友。例如,This article有一些最小的线程示例。

答案 5 :(得分:1)

使用_beginthread()_beginthreadex()创建新主题。不要使用Win32函数CreateThread() - 它没有正确初始化C运行时的多线程方面。另请参阅this question

答案 6 :(得分:0)

您还可以查看_beginthread()功能。它与CreateThread()略有不同,您应该在选择之前了解其中的差异。