请问谁有CWinThread的详细使用方法,实在不行给个例子也可以,我上网找了很久都没找到,只好求救大家了!

解决方案 »

  1.   

    CWinThread类成员数据成员 m_bAutoDelete 指定线程结束时是否要销毁对象  
    m_hThread 当前线程的句柄  
    m_nThreadID 当前线程的ID  
    m_pMainWnd 保存指向应用程序的主窗口的指针  
    m_pActiveWnd 指向容器应用程序的主窗口,当一个OLE服务器被现场激活时  构造函数 CWinThread 构造一个CWinThread对象  
    CreateThread 开始一个CWinThread对象的执行  操作 GetMainWnd 查询指向线程主窗口的指针  
    GetThreadPriority 获取当前线程的优先级  
    PostThreadMessage 向另外的CWinThread对象传递一条消息  
    ResumeThread 减少一个线程的挂起计数  
    SetThreadPriority 设置当前线程的优先级  
    SuspendThread 增加一个线程的挂起计数  可重载函数 ExitInstance 重载以进行线程终止时的清理工作  
    InitInstance 重载以实现线程实例的初始化  
    OnIdle 重载以进行线程特定的空闲操作  
    PreTranslateMessage 在消息被发送到Windows函数TranslateMessage和DispatchMessage之前过滤消息  
    IsIdleMessage 检测特定的消息  
    ProcessWndProcException 截获线程消息和命令处理函数出现的所有未处理的异常  
    ProcessMessageFilter 在特定的消息到达应用程序之前截获消息  
    Run 线程的具有消息收发功能的控制函数,可重载以定制缺省的消息循环  
      

  2.   

    先这样做:
    CWinThread g_Thread(yourThreadProc,(LPVOID)(yourThreadProcParam));
        //使用类构造函数CWinThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam)传入线程函数及其参数。
    再Create线程:
    g_Thread.CreateThread()      //用默认参数,当然,也可以不用。
    这样的就和使用:
    CWinThread* g_pThread = AfxBeginThread(yourThreadProc,(LPVOID)(yourThreadProcParam));
    一样了。
      

  3.   

    线程函数声明记得用上static...
    例子正好身边没有,在自己笔记本上~
      

  4.   

    也可以用线程派生类的方式。
    .h 文件
    #define WM_TEST WM_USER + 1class CTestThread : public CWinThread
    {
    DECLARE_DYNCREATE(CTestThread)
    protected:
    CTestThread ();        
    virtual ~CTestThread ();
    public:
    virtual BOOL InitInstance();
    virtual int  ExitInstance();
    protected:
    afx_msg void OnTest(WPARAM wParam,LPARAM lParam);
    DECLARE_MESSAGE_MAP()
    };.Cpp 文件
    #include "stdafx.h"
    #include "TestThread.h"IMPLEMENT_DYNCREATE(CTestThread, CWinThread)CTestThread::CTestThread()
    {
    }CTestThread::~CTestThread()
    {
    }BEGIN_MESSAGE_MAP(CTestThread, CWinThread)
    ON_THREAD_MESSAGE(WM_TEST,OnTest)
    END_MESSAGE_MAP()BOOL CTestThread::InitInstance()
    {
            return TRUE;
    }int CTestThread::ExitInstance()
    {
    return CWinThread::ExitInstance();
    }void CTestThread::OnTest(WPARAM wParam,LPARAM lParam)
    {
        AfxMessageBox("test");
    }调用的地方
    CWinThread* m_pThrd;
           //启动
           m_pThrd = AfxBeginThread(RUNTIME_CLASS(CTestThread));
          
           // 需要执行线程中的操作时
            m_pThrd->PostThreadMessage(WM_TEST,NULL,NULL);
          
          // 结束线程
           HANDLE hp=m_pThrd->m_hThread;
          if (hp) 
          {
    if (WaitForSingleObject(hp, 1) != WAIT_OBJECT_0)
    {
    TerminateThread(hp,0);
    }
    CloseHandle(hp);
          }
    这是框架,楼主要是需要什么操作,自己定义、添加自己的线程消息就可以了。
      

  5.   

    http://www.vckbase.com/document/finddoc.asp?keyword=%CF%DF%B3%CC
      

  6.   

    DECLARE_DYNCREATE(CTestThread)
    IMPLEMENT_DYNCREATE(CTestThread, CWinThread)
    请问4楼的,这两句是什么意思?
      

  7.   

    VC代码库的一个专题 很详细 
    http://www.vckbase.com/document/finddoc.asp?keyword=%CF%DF%B3%CC
      

  8.   

    DECLARE_DYNCREATE 宏。支持动态创建。
      

  9.   

    DECLARE_DYNCREATE(CTestThread) 
    IMPLEMENT_DYNCREATE(CTestThread, CWinThread) 支持 类的动态创建 相当于 从类的名字 可以直接创建类  RUNTIMECLASS