如何在同一个类(C++、MFC)中调用工作线程?

2024-06-22

这是我的代码,其中包含错误:

void ClassA::init()
{
    HANDLE hThread;
    data thread;          // "thread" is an object of struct data

    hThread = CreateThread(NULL, 0, C1::threadfn, &thread, 0, NULL);
}

DWORD WINAPI ClassA::threadfn(LPVOID lpParam)
{   
    data *lpData = (data*)lpParam;
}

Error:

error C3867: 'ClassA::threadfn': function call missing argument list; use '&ClassA::threadfn' to create a pointer to member

让工作线程在单个类中工作的正确方法是什么?


线程创建函数不知道 C++ 类;因此,您的线程入口点必须是静态类成员函数或非成员函数。您可以通过this指针作为lpvThreadParam参数到CreateThread()函数,然后让静态或非成员入口点函数简单地调用threadfn()通过该指针执行函数。

If the threadfn()功能is静态,然后确保你把& before C1::threadfn.

这是一个简单的例子:

class MyClass {
  private:
    static DWORD WINAPI trampoline(LPVOID pSelf);
    DWORD threadBody();
  public:
    HANDLE startThread();
}

DWORD WINAPI MyClass::trampoline(LPVOID pSelf) {
  return ((MyClass)pSelf)->threadBody();
}

DWORD MyClass::threadBody() {
  // Do the actual work here
}

HANDLE MyClass::startThread() {
  return CreateThread(NULL, 0, &MyClass::trampoline, (LPVOID)this, 0, NULL);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在同一个类(C++、MFC)中调用工作线程? 的相关文章

  • 如何重写实体数据模型创建的对象上的 Equals?

    我创建了一个实体数据模型 它从 SQLite 数据库中提取记录 其中一个表是 People 我想重写 person Equals 方法 但我不确定去哪里进行这样的更改 因为 Person 对象是自动生成的 我什至看不到该 autogen 代
  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • 如何使用 LINQ ForEach 更改 List

    我有一个List
  • 以 ISO 8601 格式输出日期

    如何在 C 中获取以下格式的日期 2016 04 26T19 50 48Z include
  • 指向指针的指针和指向二维数组的指针之间的区别

    如果我有一个二维数组 B 定义为 int B 2 3 1 3 5 2 4 6 Is int p B与 一样int p 3 B int f B printf d f 1 gives 5作为输出 同时printf d f 给出 1 作为答案 为
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 如何将 QSerialPort 模块添加到 CMake 中?

    我想将 QSerialPort 模块添加到 CMake 中 根据我的理解 我需要将QT 串口添加到 pro中 我只想使用 CMake 所以我尝试编译简单的 CMake 文件 但有错误 QtCore 正在工作 qDebug 可以毫无问题地显示
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • OpenMP 循环数组访问中的错误共享

    我想利用 OpenMP 来并行执行我的任务 我需要将数组的所有元素减去相同的数量并将结果写入另一个向量中 两个数组都是动态分配的malloc第一个填充了文件中的值 每个元素都有类型uint64 t pragma omp parallel f
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 链接错误:xxx 已在 *****.LIB 中定义:: 究竟出了什么问题?

    Problem 我正在尝试使用一个名为DCMTK http dicom offis de dcmtk它使用了一些其他外部库 zlib libtiff libpng libxml2 libiconv 我已经从同一网站下载了这些外部库 LIB
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • 使用反射检测属性的访问修饰符类型

    我编写了一些代码来使用反射查看属性 我已经使用反射从类中检索了属性列表 但是我需要查明该财产是公共的还是受保护的 例如 public string Name get set protected int Age get set Propert
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • Unity 错误“内部构建系统错误。后端退出,代码为 -1073740791。”摧毁/杀死了我的项目

    好吧 我可能在这里夸大了 但这是真的 当我开始打开它时 该项目由于错误 内部构建系统错误 后端退出 代码为 1073740791 而被破坏 应用程序 这个项目已经在Google Play上发布了 也许和设置有关 有人可以帮忙吗 完整错误 I
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 在VBA中搜索字符串中包含小数的数字

    因此 我正在开发一个项目 该项目的输入来自一个相当笨重的数据库 我对它提供给我的数据类型的控制权为零 它基本上给了我一个字符串 其中包含数字 包括小数 取0 5 Tab每日口服 2 次 每当它说制表符时 我想获取制表符之前的数字并将其转换为
  • 在 Jupyter Notebook 中找不到来自 Conda env 的包

    我创建了一个名为 imagecraper 的环境并用它安装了 pip 然后我继续使用 pip 安装一个名为 ImageScraper 的包 gt gt activate imagescraper imagescraper gt gt pip
  • Bootstrap:垂直表单内的水平字段

    我希望使用 Bootstrap 在 垂直样式 表单中添加一些 水平样式 字段 我怎样才能做到这一点 如果可能的话 您可以利用 Bootstrap 的现有类 checkbox inline 以获得您正在寻找的效果 使其看起来正确的关键是指定p
  • 在 Mac osx 10.10.2 上使用 Python 2.7.9 Anaconda 2.2.0 编译 igraph 的 C 核心时出现问题

    我想知道是否有人遇到过类似的问题并找到了解决方案 我正在尝试在 Mac osx 10 10 2 上使用 Python 2 7 9 Anaconda 2 2 0 安装 igraph 我设法brew install homebrew scien
  • 无法从命令行访问 mvn 命令?

    我尝试过访问mvn从命令行 安装路径 C Program Files Apache Software Foundation apache maven 3 1 1 用户变量 M2 M2 HOME bin M2 HOME C Program F
  • 气流 sla_miss_callback 函数未触发

    我一直在尝试获取松弛消息回调以在 SLA 未命中时触发 我注意到 SLA 未命中已在 Airflow Web UI 中成功注册 网址为slamiss list on failure callback工作成功 但是 那sla miss cal
  • C语言中可以使用for循环来改变变量名吗?

    这是一个通用问题 因此我没有尝试解决的实际代码 但我想知道的是 我可以使用for循环更改C中变量的名称 例如 如果我有part1 part2 part3 part 作为我的变量名 有没有办法将它附加到我的循环计数器 以便它会随着每次通过而增
  • 如何让 CSS 字体与这个 Grails PDF 渲染插件一起使用?

    我正在使用 Grails 渲染插件来生成 PDF 我想在我的 PDF 中包含 CSS 以便更好地呈现它 我在上找到了一个例子渲染插件网站 http gpc github io grails rendering docs manual gui
  • 签名时发生错误:未知错误“-2147012894”

    我有 pfx 证书 购买自https www globalsign co uk https www globalsign co uk 我已使用它签署了我的 VSTO Visual Studio 中的 Excel 加载项项目类型 项目的 Cl
  • 在 onLoadFinished() 期间合并游标会在旋转后导致 StaleDataException

    我正在使用 loaderManager 从数据库加载一些结果 不幸的是 下面的代码会产生一个陈旧数据异常旋转设备后 Override public void onLoadFinished Loader
  • 从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本

    当使用 Tap 选择它时 我尝试从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本 还想在选择文本时删除复制图标 按住点击时 我想确认网络浏览器控件有任何选定的文本 我怎样才能在那里存支票 我还想突出显示网络
  • 使用 Fabric js 将背景图像调整为画布大小

    我正在尝试拉伸背景图像 使其适合画布大小 但它不起作用 我已经关注了这个问题 并根据评论我已经实现了拉伸代码 使用 Fabric js 将背景图像拉伸到画布大小 https stackoverflow com questions 29005
  • 使用 android 平台更新 parse.com 中每行的值

    我在更新名为 parse com 的云存储站点中的每行值时遇到问题 我只是使用 parse com 的新手 我已阅读有关它的文档并理解它 但我想做的与那里的例子有点不同 这是我的代码 public void onClick View arg
  • 数据驱动的状态机应用

    我们目前正在开发 数据驱动 状态机应用程序 现在 状态流都在数据库中配置 但在我们当前的设计中 没有任何决策 业务逻辑可以在数据库中配置 因此 代码也必须基本上 了解 状态流 因此在数据库中配置流确实没有意义 我心中有一个设计 允许我们使用
  • 如何在保留合并更改的同时删除合并提交?

    我有来自我的存储库的提交日志 您可以看到 合并分支 到 提交 在这些提交之后 分支被合并 我需要删除合并提交 但不放弃更改 默认变基不显示合并提交 如果您想应用提交的更改而不包括合并提交 正如 Roland Smith 指出的那样 这通常被
  • 访问SVHN数据集中hdf5组的两种方式有什么区别?

    我需要读取 SVHN 数据集并尝试读取第一张图像的文件名 我在理解 HDF5 的结构方面有点困难 尤其是在理解 SVHN 数据集的层次结构 结构方面 这两种读取图像名称的方法有什么区别 我在这个脚本的定义中遇到了方法1getName 功能
  • 如何检查Canvas中的两个图形(线)是否发生碰撞?

    所以我一直在开发一款跑步火柴人游戏 不幸的是 我遇到了这个问题 我似乎无法弄清楚 如果名为障碍物的绘图穿过我的火柴人 我希望出现警报并说 游戏结束 然而 如果我的火柴人踢 他变成红色 并且障碍物接触到图纸的右脚 那么它会说 你赢了 任何帮助
  • VT100 ANSI 转义序列:获取屏幕尺寸、条件 ANSI

    当我在终端上调整大小时 它保持全屏 我想 有某种方法可以找出终端的屏幕尺寸 我怎样才能在 VT100 中做到这一点 使用 时 当我列出文件夹时 它会以蓝色显示文件夹 或者说不同的颜色 但是 如果将输出保存到文本文件 ls gt out tx
  • 如何根据发送者的身份使新消息显示在左侧/右侧? (无浮动)

    我正在尝试制作一个网页 根据用户 1 左文本区域 或用户 2 右文本区域 是否发送消息 黄色对话窗口中的消息显示在左侧或右侧 与消息在手机上的显示方式相同如今 通过发送消息的背景颜色可以区分消息的发送者 用户1为浅蓝色 用户2为紫色 我试图
  • 如何在同一个类(C++、MFC)中调用工作线程?

    这是我的代码 其中包含错误 void ClassA init HANDLE hThread data thread thread is an object of struct data hThread CreateThread NULL 0