在MFC的工作者线程

时间:2011-01-24 07:17:49

标签: c++ mfc

我想在同一个类中创建一个简单的工作线程。但是,我面临的主要问题有三个:

  1. 定义类头中的线程函数。
  2. 主题功能致电
  3. 调用线程函数格式
  4. 我也很困惑使用AfxBeginThread或CreateThread函数调用来传递多个线程参数。任何人都可以根据我上面提供的3件事情为我提供一个在MFC中运行的简单工作线程吗?

3 个答案:

答案 0 :(得分:1)

类头中线程函数的定义:它必须是静态成员,因为将“this”放入隐藏参数的常用方法不起作用。由于您只获得一个参数,因此您希望参数是指向结构的指针,结构的一个成员可以是静态成员可以调用的类实例的“this”。

线程函数调用:由于被调用的函数将使用MFC,因此最简单的方法是让调用者调用AfxBeginThread。既然你说线程将是一个工作线程,那么调用专为工作线程设计的AfxBeginThread版本(即使它并不重要)。

调用线程函数格式。 MSDN描述了AfxBeginThread,并说明必须将原型用于第一个参数。

答案 1 :(得分:0)

理想情况下,您永远不应该使用CreateThred。如果您使用的是MFC,则必须使用AfxBeginThread来创建线程。

我在这次讨论中给出了一些解释:http://www.daniweb.com/forums/thread249210.html

答案 2 :(得分:0)

CreateThread主要用于UI线程,但仍然首选使用AfxBeginThread的第二种方法。存储对标题中的线程句柄的引用而不是线程。

HANDLE hThread;

然后在源代码中启动指向proc的线程:

CWinThread *pThread;
if(!(pThread = AfxBeginThread(ThreadProc, NULL, THREAD_PRIORITY_NORMAL, 0,     CREATE_SUSPENDED))) {
delete arr;
} 
::DuplicateHandle(GetCurrentProcess(), pThread->m_hThread, GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS);

pThread->ResumeThread();

您将其暂停,以便将句柄复制到标题中存储的句柄。这样你就可以使用存储的句柄来检查exitcode。