Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232068
  • 博文数量: 39
  • 博客积分: 420
  • 博客等级: 下士
  • 技术积分: 457
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-01 10:22
文章分类

全部博文(39)

文章存档

2015年(15)

2014年(11)

2013年(1)

2012年(2)

2011年(1)

2010年(9)

我的朋友

分类: C/C++

2013-10-30 13:14:24

分别用AfxBeginThread函数和CreateThread函数创建线程
方法一     使用AfxBeginThread创建线程
1、在对话框类中添加静态线程函数,如:

点击(此处)折叠或打开

  1. class CGenerateCSVDlg : public CDialog
  2. {
  3. public:
  4.       CGenerateCSVDlg (CWnd* pParent = NULL);
  5.       static UINT CreateCheckDatabaseThread(LPVOID);//创建线程函数
  6.       CWinThread *DatabaseThread;
  7.       BOOL RunCheckDatabaseThread();//线程调用函数
  8.       //{{AFX_DATA(CGenerateCSVDlg )
  9.       enum { IDD = IDD_CHECKSERVER_DIALOG };
  10.       //}}AFX_DATA
  11.       //{{AFX_VIRTUAL(CGenerateCSVDlg )
  12.     protected:
  13.        //{{AFX_VIRTUAL(CGenerateCSVDlg )
  14.        virtual void DoDataExchangeCDataExchange*pDX);
  15.        //}}AFX_VIRTUAL
  16.        //{{AFX_MSG(CGenerateCSVDlg )
  17.        //}}AFX_MSG
  18.        DECLARE_MESSAGE_MAP()
  19. };

2、在CGenerateCSVDlg .cpp文件中添加如下函数:

点击(此处)折叠或打开

  1. UINT CGenerateCSVDlg ::CreateCheckDatabaseThread(LPVOID phread)
  2. {
  3.     CGenerateCSVDlg *p=(CGenerateCSVDlg *)phread;
  4.     while (TRUE)
  5.     {
  6.         Sleep(3000);
  7.         p->RunCheckDatabaseThread();   
  8.     }
  9.     return TRUE;
  10. }
  11. BOOL CGenerateCSVDlg ::RunCheckDatabaseThread()
  12. {
  13.     return TRUE;
  14. }

3、创建线程

点击(此处)折叠或打开

  1. BOOL CGenerateCSVDlg ::OnInitDialog()
  2. {
  3.     CDialog::OnInitDialog();
  4.     DatabaseThread=::AfxBeginThread(CreateCheckDatabaseThread,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
  5.     DatabaseThread->ResumeThread();
  6.     return TRUE; // return TRUE unless you set the focus to a control
  7. }
方法二  使用CreateThread创建线程
1、定义一个全局函数,不包含在类中,如:

点击(此处)折叠或打开

  1. DWORD WINAPI ThreadRun(LPVOID lpParamter)
  2. {
  3.     CGenerateCSVDlg *p=(CGenerateCSVDlg *)lpParamter;
  4.     while(p->IsRunThrend)                //IsRunThrend为CGenerateCSVDlg类中的成员变量
  5.     {
  6.         if (p->IsCreateCSV)              //IsCreateCSVCGenerateCSVDlg类中的成员变量
  7.         {
  8.             p->CreateCSV();              //CreateCSVCGenerateCSVDlg类中的成员函数
  9.         }
  10.     }
  11.     return 0;
  12. }
2、CGenerateCSVDlg .cpp文件中添加如下函数:

点击(此处)折叠或打开

  1. void CGenerateCSVDlg::CreateCSV()
  2. {

  3. }
3、创建线程函数,如下:

点击(此处)折叠或打开

  1. BOOL CGenerateCSVDlg ::OnInitDialog()
  2. {
  3.     CDialog::OnInitDialog();
  4.     HANDLE hThread = CreateThread(NULL, 0, ThreadRun, (LPVOID)this, 0, NULL);
  5.     CloseHandle(hThread);
  6.     return TRUE; // return TRUE unless you set the focus to a control
  7. }
4、类中的成员

点击(此处)折叠或打开

  1. class CGenerateCSVDlg : public CDialog
  2. {
  3. public:
  4.       CGenerateCSVDlg (CWnd* pParent = NULL);
  5.       void CreateCSV();
  6.       BOOL IsCreateCSV;
  7.       BOOL IsRunThrend;
  8.       //{{AFX_DATA(CGenerateCSVDlg )
  9.       enum { IDD = IDD_CHECKSERVER_DIALOG };
  10.       //}}AFX_DATA
  11.       //{{AFX_VIRTUAL(CGenerateCSVDlg )
  12.     protected:
  13.        //{{AFX_VIRTUAL(CGenerateCSVDlg )
  14.        virtual void DoDataExchangeCDataExchange*pDX);
  15.        //}}AFX_VIRTUAL
  16.        //{{AFX_MSG(CGenerateCSVDlg )
  17.        //}}AFX_MSG
  18.        DECLARE_MESSAGE_MAP()
  19. };





阅读(3230) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~