在C语言编程时,我倾向于使用POSIX Threads Linux 。
不使用 MFC
问题:
我如何在VC ++中创建线程?
在win32下查找有关线程的更多信息?
我喜欢stackoverflow - 学生最好的资源!
此致
答案 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()略有不同,您应该在选择之前了解其中的差异。