【发布时间】:2010-10-05 01:13:59
【问题描述】:
在 Linux 下使用 C 编程时,我倾向于使用 POSIX Threads。
没有MFC
问题:
然后我将如何在 VC++ 中创建线程?
找到更多关于win32下线程的信息?
编辑:
- 简图
我喜欢 stackoverflow - 适合学生的最佳资源!
问候
【问题讨论】:
标签: c++ windows visual-studio-2008
在 Linux 下使用 C 编程时,我倾向于使用 POSIX Threads。
没有MFC
问题:
然后我将如何在 VC++ 中创建线程?
找到更多关于win32下线程的信息?
我喜欢 stackoverflow - 适合学生的最佳资源!
问候
【问题讨论】:
标签: c++ windows visual-studio-2008
如果您正在寻找独立于平台的方法,请使用boost
还有 beginthread() 和 beginthreadex() 函数。两者似乎都是对 Win32 API 的补充,从某种意义上说,在许多用例中,您仍然需要调用一些 Win32 函数(例如用于 beginthreadex 的 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 可能会在内存不足的情况下终止进程。
【讨论】:
Petzold 的 Programming Windows 和 Richter 的 Programming Applications for Windows. 尤其是关于该主题的一些好书,后者深入探讨了服务器端编程,例如线程和同步 API。
编辑: 对于代码 sn-ps,Google 是您的朋友。例如This article 有一些最小的线程示例。
【讨论】:
您可以使用 CRT 函数 _beginthreadex() 或 Windows API 函数 CreateThread()。 _beginthreadex() 对于具有没有延迟初始化线程本地存储的 CRT 的早期版本的 VC++ 是必需的。 CreateThread() 至少在 VS2005 及更高版本中很好。
【讨论】:
您不应使用原始 Win32 CreateThread() API。
使用 C 运行时的 _beginthreadex(),以便运行时有机会设置自己的线程支持。
【讨论】:
您还可以查找_beginthread() 函数。它与 CreateThread() 有点不同,你应该在选择之前知道它们的区别。
【讨论】:
使用_beginthread() 或_beginthreadex() 创建一个新线程。不要使用 Win32 函数CreateThread()——它没有正确初始化 C 运行时的多线程方面。另见this question。
【讨论】:
您可能想看看CreateThread() 函数。
【讨论】: