如何在C++中创建多线程记录器

我想在c++中创建一个多线程记录器,它也可以从ccode调用

这在我的source.cpp文件中:

\include<cstdlib>
#包括<iostream>
#包括<螺纹>
#包括「;来源:h“;
使用名称空间std;
#ifdef_uucplusplus
“外部”;";{
#恩迪夫
类线程_obj{
公众:
void运算符()(浮点*x)
{
printf(“值:%d”,x);
}
};
无效日志(浮动值)
{
螺纹th1(螺纹_obj(),值);
th1.join();
}
#ifdef_uucplusplus
}
#恩迪夫

这在source.h中:

\ifdef\uucplusplus
“外部”;";{
#恩迪夫
无效日志(浮动值);
#ifdef_uucplusplus
}
#恩迪夫

现在我想从C文件中使用它,比如:log(myFloatValue),当然包括头文件

但我犯了一些奇怪的错误,比如:

错误C2672“调用”:未找到匹配的重载函数myproj C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 43
错误C2893未能专门化函数模板“未知类型std::invoke(\u Callable&,\u Ty1&,\u Types2&…)noexcept(<expr>)”myproj C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39
错误C2780“未知类型std::invoke(&u Callable&)noexcept(<expr>)”:需要1个参数-2个提供的hackatlon\u 0\u 1 C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39

我的问题是,我如何做到这一点,或者如何解决这些错误

您的代码存在多个问题:

  1. 运算符()的参数应该是float x而不是float*,因为这是传递给线程的内容
  2. 日志函数与标准数学日志冲突。更改函数名或将其放入不同的命名空间中
  3. 使用格式说明符打印%d&quot。它应该是"%f&quot因为输入是浮动的
  4. 您不需要放置extern""用于类。您正在避免仅对需要从c文件调用的log函数进行名称损坏

发表评论