回 帖 发 新 帖 刷新版面

主题:多线程?

请问我如何在C++中实现多线程???

回复列表 (共2个回复)

沙发

有几种选择。
1. 最直接的方法,使用操作系统的API。例如Windows系统就有CreateThread等方法来创建线程。
2. 使用一些支持多线程的函数库。最著名的就是boost啦。除了多线程,它还有很多其它功能。不过boost本身体积可也不小。相信也可以找到一些体积小巧的多线程库。
3. 在不久的将来(2009年?),多线程就会成为C++标准的一部分。那时应该会有专门的文档介绍如何使用标准的多线程。

板凳


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.之后要研究的内容
 线程的通信(全局变量通信,消息传递..),线程同步(临界区,信号量..);

我来回复

您尚未登录,请登录后再回复。点此登录或注册