ZBLOG

AfxBeginThread传递数据

要在AfxBeginThread函数中传递数据,可以通过结构体或类来封装需要传递的数据,并将其作为线程函数的参数。以下是一个示例:

struct ThreadData {
    int threadID;
    CString message;
};

UINT MyThreadFunction(LPVOID pParam)
{
    ThreadData* pData = (ThreadData*)pParam;
    
    // 使用传递的数据进行线程操作
    int id = pData->threadID;
    CString msg = pData->message;

    CString strMessage;
    strMessage.Format(_T("Hello from thread %d! Message: %s"), id, msg);
    AfxMessageBox(strMessage);

    delete pData;  // 在线程函数中释放传递的数据
    
    return 0;
}

void StartMyThread()
{
    ThreadData* pData = new ThreadData();
    pData->threadID = 1;
    pData->message = _T("This is a message");

    CWinThread* pThread = AfxBeginThread(MyThreadFunction, (LPVOID)pData);

	if (pThread == nullptr) {
		// 线程创建失败处理逻辑
		delete pData;  // 创建失败时需要手动释放内存
	} else {
		// 线程创建成功处理逻辑
	}
}

在上述代码中,我们定义了一个名为 ThreadData 的结构体来包含需要传递给线程函数的数据。然后,在 StartMyThread 函数中,我们创建了一个 ThreadData 对象,并设置相应的值。

接着,我们调用 AfxBeginThread 函数并将 MyThreadFunction 作为线程函数传递给它。我们将第二个参数设置为 (LPVOID)pData,将 ThreadData 对象的指针强制转换为 LPVOID 类型传递给线程函数。

在线程函数 MyThreadFunction 中,我们使用强制类型转换将传递的参数恢复回 ThreadData* 类型,并可以通过该指针访问传递的数据进行相应的操作。

最后,在线程函数中记得释放传递的数据,以避免内存泄漏。

需要注意的是,在跨线程传递数据时要确保数据的有效性和生命周期管理,特别是在释放内存时需要小心处理。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12408

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?