我想在同一个类中创建一个简单的工作线程。但是,我面临的主要问题有三个:
我也很困惑使用AfxBeginThread或CreateThread函数调用来传递多个线程参数。任何人都可以根据我上面提供的3件事情为我提供一个在MFC中运行的简单工作线程吗?
答案 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。