繁体   English   中英

如何在VC ++中创建线程

[英]How to create threads in VC++

  • Linux下用C编程时,我倾向于使用POSIX线程

  • 没有MFC

题:

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

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

编辑:

  • 简要插图

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

问候

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

还有beginthread()和beginthreadex()函数。 两者似乎都是Win32 API的补充,从某种意义上说,在许多情况下,您仍然需要调用一些Win32函数(例如BeginThreadex的CloseHandle)。 因此,如果您不太在乎平台兼容性,则不妨删除前戏并使用CreateThread()。

Win32线程处理记录在这里: http : //msdn.microsoft.com/zh-cn/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可能会在内存不足的情况下终止进程。

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

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

您可以使用CRT函数_beginthreadex()或Windows API函数CreateThread()。 _beginthreadex()对于VC ++的早期版本是必需的,该版本的CRT并未延迟初始化线程本地存储。 至少在VS2005及更高版本中,CreateThread()很好。

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

关于该主题的一些好书是Petzold的《 编程Windows》和Richter的《 Windows编程应用程序》。 特别是,后者在很多方面都深入到了服务器端编程,例如线程和同步API。

编辑:对于代码段,Google是您的朋友。 例如, 本文提供了一些最少的线程示例。

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

您还可以查找_beginthread()函数。 它与CreateThread()有所不同,在选择一个之前,您应该了解这些差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM