主题:多线程?
			 gzgujs
				 [专家分:0]  发布于 2008-04-28 13:46:00
 gzgujs
				 [专家分:0]  发布于 2008-04-28 13:46:00							
			请问我如何在C++中实现多线程???
						
					 
		
			
回复列表 (共2个回复)
		
								
				沙发
				
					 eastcowboy [专家分:25370]  发布于 2008-04-28 21:50:00
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
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.之后要研究的内容
 线程的通信(全局变量通信,消息传递..),线程同步(临界区,信号量..);
							 
									
			
我来回复