gpt4 book ai didi

visual-c++ - 如何在vc++ mfc中使用非静态方法创建线程

转载 作者:行者123 更新时间:2023-12-04 23:30:18 25 4
gpt4 key购买 nike

我正在使用这个调用创建一个线程:

m_pThread=AfxBeginThread(read_data,(LPVOID)hSerial);
read_data是我类的静态方法。

但我想调用一个非静态方法并创建一个线程。

因为我想在这个线程和我的一个类方法之间共享一个变量。

我尝试使用静态变量,但它给出了一些错误。

最佳答案

您不能使用函数的非静态成员作为线程过程来创建线程:原因是类的所有非静态方法都有一个隐式的第一个参数,这是指针 this。

这个

class foo
{
void dosomething();
};

实际上是
class foo
{
void dosomething(foo* this);
};

因此,函数签名与线程过程所需的签名不匹配。您可以使用静态方法作为线程过程并将 this 指针传递给它。下面是一个例子:
class foo
{
CWindThread* m_pThread;
HANDLE hSerial;

static UINT MyThreadProc(LPVOID pData);

void Start();
};

void foo::Start()
{
m_pThread=AfxBeginThread(MyThreadProc,(LPVOID)this);
}

UINT foo::MyThreadProc(LPVOID pData)
{
foo* self = (foo*)pData;

// now you can use self as it was this

ReadFile(self->hSerial, ...);

return 0;
}

关于visual-c++ - 如何在vc++ mfc中使用非静态方法创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com