wxWidgets开发之多线程wxThread编程

2023-11-07

上节说到使用wxCondition来实现某一消息处理的业务场景的多线程处理方法。

在此之前先分享一下wxCondition用法。

条件变量,最常用在多线程环境下,用来指示当前所在线程的某些条件已经满足,其他线程可以共享该线程的数据,或者去完成预定的任务。简单的说,就是某一个线程达到了某些条件,告诉其他线程,我已经达到了条件和要求了,然后其他线程就开始做他们的任务了。举个例子:可以使用它来指示一个消息线程已经有数据到来了。

注意:调用 wxCondition::Signal可能发生 在调用wxConditicon::Wait之前,所以为了确保不错过该信号就必须保持与条件初始化相关联的互斥锁,并在调用wxCondition::Signal之前再次上锁保证这段时间内线程同步。

请看以下具体关于使用wxCondition条件变量例子:

class MySignallingThread : public wxThread
{
public:
    MySignallingThread(wxMutex *mutex, wxCondition *condition)
    {
        m_mutex = mutex;
        m_condition = condition;
    }
    virtual ExitCode Entry()
    {
        ... do our job ...
        
        wxMutexLocker lock(*m_mutex);
        m_condition->Broadcast(); //等同于Signal
        return 0;
    }
private:
    wxCondition *m_condition;
    wxMutex *m_mutex;
};
int main()
{
    wxMutex mutex;
    wxCondition condition(mutex);
    
    mutex.Lock();
    
    MySignallingThread *thread = new MySignallingThread(&mutex, &condition);
    thread->Run();
    condition.Wait();
    return 0;
}

图中代码意思 启动MySignallingThread线程然后进入线程入口函数Entry,主线程 condition.Wait()意为等待MySignallingThread线程发出信号,主线程才能执行return 0;退出主线程。

这里再说明一点Wait函数可用C++11Lambda匿名表达式,像这样子:condvar.Wait([]{return value == 1;});

拜拜!!!!!!

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

wxWidgets开发之多线程wxThread编程 的相关文章

随机推荐

  • UEFI与BIOS(CSM)下安装Windows以及双系统需要知道的一些事

    文章目录 EFI是什么 CSM是什么 UEFI是什么 安装Windows时需要注意什么 安装双系统时需要注意什么 参考 EFI是什么 我之前的一篇博客计算机启动的基本过程提到了BIOS是个程序 存储在BIOS芯片中 而现在的新式电脑用的基本
  • Twig模板引擎常用基础用法总结

    Twig是一种PHP模板引擎 最近 由于比较频繁的使用Twig模板 于是想总结一下一些常用的基本用法 希望能给对Twig还不熟悉的朋友带来帮助 首先贴一下Twig官方文档链接 Twig模板语法官方文档 一 变量定义与使用 使用 set 定义
  • 数据库产生的背景

    市场上出现某个产品往往是为了满足大家啥需求 只有在某个需求背景下才会产生相应的产品来 当然也有人说再厉害点的公司是创造一种需求出来 但实际上也要人在潜意识里有那种需求才行的 人可能在潜意识里有很多需求 只不过他自己也不确切的知道 你通过一个
  • Type-c引脚定义

    Type c口是什么口 有什么作用 Type c口在大家的视野中或许比较陌生 但是生活中处处离不开Type c口的存在 手机 电脑 音箱 小家电 无人机 等等 都存在Type c接口 Type c只是一种物理接口的简称 满PIN 24PIN
  • YoloV8改进策略:让SeaFormer走进Yolov8的视野,轻量高效的注意力模块展现出无与伦比的魅力

    文章目录 摘要 论文翻译 摘要 1 简介 3 方法 3 1 总体架构 3 2 压缩增强轴向注意力 4 实验 4 1 实验设置 4 4 1 数据集 4 1 2 实现细节 4 2 与SOAT比较 4 3 消融研究 4 4 图像分类 4 5 时延
  • 如何零基础创建得物同款AR试鞋体验

    AR虚拟试鞋在近几年通过得物APP正式在C端市场中火了起来 并且逐渐成为各大电商平台的标配 下面就通过一篇零基础教程 手把手教大家如何创建AR试鞋体验 并接入自己的官网 APP或微信小程序 一 登录与创建场景 介绍一下本次AR试鞋体验制作用
  • LSTM时间序列回归matlab实现(附代码+数据集)

    原理部分 LSTM在1997年被提出 从发表时间上来看已经是个 老 方法了 和其他的神经网络一样 LSTM可用于分类 回归以及时间序列预测等 原理部分的介绍可参考这篇博客 本文主要涉及利用matlab实现LSTM 代码部分 任务 以青霉素发
  • WSL升级WSl2 以及更新内核组件

    WSL 升级 WSL2 查看当前WSL版本 打开PowerShell 执行命令 wsl l v 检查运行wsl2的系统要求 打开终端 Win R 后输入cmd 输入winver 版本高于18362即可 win10 家庭版需要安装 Hyper
  • (附源码)计算机毕业设计SSM会议管理系统

    附源码 计算机毕业设计SSM会议管理系统 项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支
  • http的七层协议

    socket 套接字 是通信的基石 是支持TCP IP协议的网络通信的基本操作单元 包含进行网络通信必须的五种信息 连接使用的协议 本地主机的IP地址 本地进程的协议端口 远地主机的IP地址 远地进程的协议端口 多个TCP连接或多个应用程序
  • LeetCode 2363. 合并相似的物品

    给你两个二维整数数组 items1 和 items2 表示两个物品集合 每个数组 items 有以下特质 items i value i i i weight i
  • 恒指市场新手的困惑,最新战法来解决。

    1 作为一个交易者 要想取得非凡成功 须具备哪些素质呢 所有取得辉煌成就的伟大的交易者都有着以下共同的特征及基本素质 1 坚韧的性格与成熟的心态 2 疯狂的热忱与专注 3 经市场充分验证了的盈利概率及赢利模式 4 铁的执行力 5 锲而不舍的
  • Openwrt 定制版修改固件显示信息

    在 usr lib lua luci version lua中找到 文件储存在 etc openwrt release上 local pcall dofile G pcall dofile G module luci version if
  • [974]python execjs execjs._exceptions.ProgramError: ReferenceError: navigator is not defined

    问题 execjs exceptions ProgramError ReferenceError navigator is not defined 解决办法 在js文档头部添加如下代码 global navigator userAgent
  • Docker解读(什么是容器)

    一 What Is A Container 容器映像是一个软件的轻量级独立可执行软件包 包含运行它所需的一切 代码 运行时 系统工具 系统库 设置 不管环境如何 集装箱化软件都可以运行相同的Linux和Windows应用程序 容器将软件与其
  • Cython编译python为so 代码加密

    1 编译出来的so比网上流传的其他方法小很多 2 language level 是python的主版本号 如果python版本是2 x 目前的版本Cython需要人工指定language level 3 python setup py bu
  • 全网最详细charles抓包工具详细教程,实战教程(细致)

    目录 导读 一 前言 二 在PC端抓https包 三 在PC端抓https包 四 在移动端抓http包 五 在移动端抓https包 一 前言 charles相当于一个插在服务器和客户端之间的 过滤器 当客户端向服务器发起请求的时候 先到ch
  • 英伟达GPU 解码&编码 能力

    来源https en wikipedia org wiki Nvidia NVDEC
  • Zygisk-Il2CppDumper 使用Android Studio运行gradle任务:module:assembleRelease编译

    使用Android Studio运行gradle任务 module assembleRelease编译 zip包会生成在out文件夹下 记录一下编译过程 虽然直接在GIT网上进行编译成功了 但还是想自己通过Android Studio来进行
  • wxWidgets开发之多线程wxThread编程

    上节说到使用wxCondition来实现某一消息处理的业务场景的多线程处理方法 在此之前先分享一下wxCondition用法 条件变量 最常用在多线程环境下 用来指示当前所在线程的某些条件已经满足 其他线程可以共享该线程的数据 或者去完成预