错误 C3861:“_beginthreadex”:未找到标识符

Posted

技术标签:

【中文标题】错误 C3861:“_beginthreadex”:未找到标识符【英文标题】:error C3861: '_beginthreadex': identifier not found 【发布时间】:2014-12-01 14:13:39 【问题描述】:

我正在尝试将项目从 VS2008 转换为 VS2013,我遇到的一个(众多)问题是:

c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\atlbase.h(4953): error C3861: '_beginthreadex': identifier not found

我已经在网上搜索了一个解决方案,我已经在我的 StdAfx.h 中包含了 process.h,(不确定它是否重要,但我将它放在 #include 和 #include 下方,否则我会收到一个“ Windows.h" 已包含错误)。

我使用 MFC 作为共享 dll,我正在使用 /MDd 进行编译并检查 -D_MT 标志是否打开。 (我也没有在我的代码中使用#undef _MT)。

我该如何解决这个问题?

【问题讨论】:

在 VS2013 中你可以使用 std::thread 代替 解决方案不小,我真的宁愿不要更改现有代码中的所有线程。 【参考方案1】:

我发现了问题所在。在附加包含目录中首先添加“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include”后,我在附加包含目录之一中有一个不同的“process.h”文件,问题已解决。

【讨论】:

【参考方案2】:

你需要:

#include <crtdefs.h>
#include <process.h>

crtdefs.h 将定义/取消定义 _beginthreadex 包含在 process.h 中的 _CRT_USE_WINAPI_FAMILY_DESKTOP_APP。

【讨论】:

【参考方案3】:

您必须包含 process.h 才能访问此功能。

在 MFC 应用程序内部,您应该使用 AfxBeginThread。

【讨论】:

Process.h 已经包含在内,以为我在问题描述中写了它,但我发现我在尖括号中写的内容没有显示,我更新了问题。 看来必须定义_CRT_USE_WINAPI_FAMILY_DESKTOP_APP

以上是关于错误 C3861:“_beginthreadex”:未找到标识符的主要内容,如果未能解决你的问题,请参考以下文章

_beginthreadex 静态成员函数

如何正确使用“__beginthreadex”?

小解_beginthreadex与_beginthreadex和CreateThread的区别

如何在 MFC 中使用 _beginthreadex

多线程CreateThread与_beginthreadex本质区别

转载CreateThread与_beginthreadex本质区别