主题:多线程?
gzgujs
[专家分:0] 发布于 2008-04-28 13:46:00
请问我如何在C++中实现多线程???
回复列表 (共2个回复)
沙发
eastcowboy [专家分:25370] 发布于 2008-04-28 21:50:00
有几种选择。
1. 最直接的方法,使用操作系统的API。例如Windows系统就有CreateThread等方法来创建线程。
2. 使用一些支持多线程的函数库。最著名的就是boost啦。除了多线程,它还有很多其它功能。不过boost本身体积可也不小。相信也可以找到一些体积小巧的多线程库。
3. 在不久的将来(2009年?),多线程就会成为C++标准的一部分。那时应该会有专门的文档介绍如何使用标准的多线程。
板凳
zjf6738 [专家分:250] 发布于 2008-04-29 23:00:00
1.实现多线程的一个重要的全局函数
AfxBeginThread(ThreadProc,lprame);//创建一个线程,具体的参数到MSDN中查找
这里的这两个参数是一个函数
UINT ThreadProc(LPVOID lparma)的函数名及参数.这个函数叫做线程函数,多线程的用户代码就放到这里面.应该说明的是,对于ThreadProc函数名,是用户自定义的,你可以改成TreadProc1,ThreadProc2或其它,但注意AfxBeginThread中的第一个参数也要跟着更改.
2.什么时候调用上述函数.这里可以举一个例子.
void CThreadView::OnThread_StartThread()
{//可以在菜单中加一个StartThread菜单项,启动线程
// TODO: Add your command handler code here
AfxBeginThread(ThreadProc,this);//传递VIEW的窗口指针
}
UINT ThreadProc(LPVOID param)
{
CThreadView* pView=(CThreadView*)param;
//INFINITE是一个时间宏
::MessageBox(pView->m_hWnd,"Thread actived","Thread",MB_OK);
for(int i=0xffffffff;i;i--);//可以设定更长的时间,观察运行情况
//一般情况是下面的代码格式
/*while(thread keep running)
{
your codes;
}
*/
::MessageBox(pView->m_hWnd,"Thread stopped","Thread",MB_OK);
return 0;
}
3.之后要研究的内容
线程的通信(全局变量通信,消息传递..),线程同步(临界区,信号量..);
我来回复