多线程之创建工作者线程和用户界面线程区别

2023-11-17

转帖+部分原创

    1、工作者线程倾向于琐碎的处理,与它不同的是,用户界面线程具有自己的界面而且实际上类似于运行其他应用程序。创建线程而不是其他应用程序的好处是线程可与应用程序共享程序空间,这样可以简化线程与应用程序共享数据的功能。
  2、典型情况是用户界面线程用于完成查询和替换等功能,或者是其他不希望占用主应用程序大量处理时间但是需要一个界面的功能或服务,或者用户也可完全不考虑界面,将这种类型的线程用于窗口消息服务器作为一种传递其消息的方式,以避免使自己因占用处理时间过多而陷入困境。
  3、在时间要求严格的应用程序(例如实时应用程序)中,不希望因为工作者线程启动而等待,这时可将工作者线程中的控制逻辑内置到用户界面线程中并提前创建线程。当需要处理事务时,向用户界面线程发送消息,此时用户界面线程已经运行并且在等待指令。
  2种线程都可以用AfxBeginThread创建,注意不同的是第一个参数。
  CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );//WORK线程
  CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );//UI线程


下面是2种线程的创建步骤:
工作者线程:
首先创建一个函数UNIT ThreadProc(LPVOID pParam);可以把这个函数看成一个线程,进行需要的操作。
然后在需要调用的时候(比如initialize的时候)调用AfxBeginThread(ThreadProc,//ThreadProc控制函数地址
                                                   &m_Control,//要显示的区域,控件对象地址,比如EDITBOX LISTBOX
                                                   0,0,0,NULL)
启动线程即可

用户界面进程:
这里以建立好的对话框MFC程序为例,首先用户界面进程需要从CWinThread类派生一个新的线程类,就叫它CMultipleThread吧,这个类下需要有窗体成员CMultipleThreadDlg* m_pDlg用于在窗体上显示,要不然怎么叫界面进程呢?还需要重载虚函数virtual int Run(),在Run函数里进行需要的操作。
接着就可以在程序创建该线程
CMultipleThread* pThread = (CMultipleThread*)AfxBeginThread(RUNTIME_CLASS(CMultipleThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL),
pThread->SetOwner(this)//设置窗口指针
pThread->ResumeThread();//恢复线程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程之创建工作者线程和用户界面线程区别 的相关文章

  • 如何使用 jQuery (IE) 删除禁用属性[重复]

    这个问题在这里已经有答案了 我面临的情况是 我必须使用禁用属性来停用我不希望用户编辑的所有输入
  • 在 Perl 中将变量链接到类属性

    这个问题源于另一个问题 Perl中彻底销毁一个对象的所有痕迹 https stackoverflow com questions 31841484 completely destroy all traces of an object in
  • 用于查找名称以给定值开头的属性的 XPath

    使用这个 xml div a div div b div div c div div d div div f div div g div 我们只想找到 div a div div b div div c div 哪些节点具有属性 其中该属性
  • Python matplotlib 减小颜色条标签的大小

    我需要你的帮助 我有一个绘图代码如下 fig plt figure ax1 fig add subplot 111 imax1 ax1 imshow data interpolation nearest origin lower cmap
  • 在源代码上添加一个新属性,该属性会传播到 LLVM 中的 MC 级别?

    我对以下内容的传播方式感兴趣 void foo int attribute aligned 16 p 在这种情况下 指针的 对齐 在 MC 级别可用 但显然没有使用 LLVM IR 元数据方法来实现这一点 对齐信息对于某些目标非常重要 这些
  • Rails:虚拟属性和表单值

    我有一本带有虚拟属性的模型书 用于从书籍表单创建编辑器 代码如下 class Book lt ActiveRecord Base has many book under tags has many tags through gt book
  • ConditionalAttribute 和其他特殊类

    The ConditionalAttribute可用于根据定义的编译器符号删除对标记方法的调用 我假设我们无法自己创建此类 因为编译器必须专门寻找它 我想知道编译器或语言使用的其他类是我们无法自己编写的 除了提到的那些之外 Attribut
  • 脚本和样式元素的 HTML“nonce”属性的用途是什么?

    W3C 表示 HTML5 1 中有一个新属性 称为nonce for style and script可供网站的内容安全策略使用 我用谷歌搜索了一下 但最终没有明白这个属性实际上是做什么的 以及使用它时会发生什么变化 The nonce属性
  • 传递带有变量值作为参数的自定义属性

    我创建了一个自定义属性类 它将检查系统安全性 并在存在安全错误时引发身份验证异常 public class EntityChecker System Attribute public EntityChecker int entityId d
  • 如何使用简单注入器将依赖项注入到 WCF 属性中

    我有一堆与 REST 和 SOAP 配合使用的 WCF 服务 我创建了一个 WCF 属性 用于检查当前 httpcontext 是否存在 如果存在 则使用 cookie 身份验证 否则使用自定义 WCF 身份验证 我的属性如下所示 Publ
  • 在提取/替换操作期间保留对象属性的方法

    最近我在我的R代码中遇到了以下问题 在接受数据框作为参数的函数中 我需要添加 或替换 如果存在 一列 其中包含根据数据框原始列的值计算的数据 我编写了代码 但测试显示数据框提取 替换操作 我用过 结果是对象的特殊 用户定义 属性丢失 在意识
  • GCC“人工”函数属性的用例

    我刚刚读到 GCC 函数属性artificial但不太明白描述 你能给我一些有用的例子吗 另一个答案没有错 但也许我可以解释得更好一些 想象一下这个函数foo c 带有行号 10 static inline int foo struct q
  • 使用 OCaml 警告属性禁用警告 8:不详尽的匹配

    我正在尝试编写类似于以下内容的代码 let a b body 1 2 我想仅针对该模式禁用警告 8 a b 而不是为了身体或让之外的任何东西 我尝试设置警告属性来禁用警告 但以下方法都不起作用 let warning 8 a warning
  • 如何禁止在Python中创建新的类属性?

    这可能看起来是一个非常基本的问题 但我在 SO 或其他地方找不到任何有用的东西 如果您参加内置课程 例如int or list 没有办法为它们创建额外的类属性 这显然是一个理想的行为 gt gt gt int x 0 Traceback m
  • .NET:属性何时实例化?我可以获得它们所修饰的类型的引用吗?

    关于属性的两个问题 属性类什么时候实例化 当第一次访问类型时 还是在开始执行时 从属性类中 我可以找出该属性是为哪种类型实例化的吗 我的想法是 我想列出程序集中应用了我的属性的所有类的列表 我当然可以通过反射和检查来迭代所有这些 但如果该属
  • 使 HTML5 视频海报与视频本身大小相同

    有谁知道如何调整 HTML5 视频海报的大小 使其适合视频本身的确切尺寸 这是一个显示问题的 jsfiddle http jsfiddle net zPacg 7 http jsfiddle net zPacg 7 这是代码 HTML
  • Selenium RC:如何检查元素是否具有给定属性?

    我有一些带有onclick属性和一些没有属性 我想检查指定的元素是否具有onclick属性 我怎样才能做到这一点 getAttribute 当有属性值时返回该属性值 如果没有 它会抛出 RuntimeException 并停止测试 即使我将
  • Xstream:删除类属性

    我该如何删除类 某事 Xstream 中的属性 我使用带注释的 Xstream 我读了它的代码 发现你的类不是mapper defaultImplementationOf fieldType 它会为你添加默认的类属性 除非类属性名称为nul
  • 自定义编译器警告

    在 Net 中使用 ObsoleteAtribute 时 它 会向您发出编译器警告 告诉您该对象 方法 属性已过时 应使用其他内容 我目前正在从事一个需要大量重构前员工代码的项目 我想编写一个自定义属性 可用于标记方法或属性 这些方法或属性
  • 如何在 UML 中正式记录 C# 属性?

    在 UML 类图中记录类的 C 属性的正确方法是什么 我还没有决定这是否是我的答案 但我想我会把它扔在那里以便讨论 这看起来可以接受吗 它是属性类型的实例 其中元数据值放入下面的标记值中 我刚刚弄清楚如何添加自定义立体类型 该箭头只是一个标

随机推荐

  • leetcode Path Sum II

    python Definition for a binary tree node class TreeNode object def init self x self val x self left None self right None
  • Python量化交易:策略创建运行流程

    同学们前面两期量化交易内容 Python量化交易入门 量化交易的历史 Python量化交易项目怎么做 Python量化交易之回测框架介绍 文章目录 学习目标 一 体验创建策略 运行策略流程 1 1 创建策略 1 2 策略界面 二 策略界面功
  • [NOI 2015复习][BZOJ 1509][NOI 2003]逃学的小孩(树的直径)

    题目链接 http www lydsy com JudgeOnline problem php id 1509 题目大意 要从一棵树中找出三个点 X Y Z X Y Z 使得 min dis A C dis B C dis A B min
  • STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考 stm32 超声波模块 原理 实现测距 舵机使用 作者 点灯小哥 发布时间 2021 03 10 19 37 16 网址 https blog csdn net weixin 46016743 article details 1146
  • 利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

    最近在看数据增强方法时 看到了这个有趣的工具包 研究了下并以yolo数据标注格式为例写了一个示例脚本 该工具最大的好处是会根据你使用的数据增强方法自动修改标注框信息 import albumentations as A import cv2
  • MySQL 数据类型

    整数类型 分类 类型 字节 范围 整数类型 TINYINT 1 128 127 SMALLINT 2 32768 32767 MEDIUMINT 3 8388608 8388607 INT INTEGER 4 2 31 2 31 1 BIG
  • JAVA数据库连接总结

    1 Oracle8 8i 9i数据库 thin模式 Class forName oracle jdbc driver OracleDriver newInstance String url jdbc oracle thin localhos
  • libuv异步文件读写

    libuv 异步文件读写 一 libuv编译环境 1 可查看另一篇 libuv 介绍与编译 http mp blog csdn net postedit 79193274 程序代码 include
  • 2022-04-30 Unity核心2——Sprite

    文章目录 一 Single 图片编辑 二 Multiple 图片编辑 三 Polygon 多边形编辑 四 Sprite Renderer 精灵渲染器 五 Sprite Creator 精灵创造者 六 Sprite Mask 精灵遮罩 七 S
  • Python语言基础—注释的作用及分类

    系列文章目录 Python语言基础 注释的作用及分类 Python语言基础 常用运算符总结 Python语言基础 定义变量与数据类型 Python语言基础 if判断和循环总结 Python语言基础 理解面向对象 Python语言基础 集合的
  • 学习之-Spring Cache缓存框架应用本地缓存

    此文章用于个人学习记录 原文地址 https zhuanlan zhihu com p 452315531 如果想了解springCache与redis的交互请看其他文章 缓存是web项目不可或缺的一部分 通过缓存能够降低服务器数据库压力
  • AIX logging

    复杂度2 5 机密度3 5 最后更新2021 05 15 AIX有很多log 不同的东西 程序 会log到不同的地方 这是有历史的操作系统无法避免的问题 太杂 太乱 有了新机制又要学 旧log又没法简单放弃或者改变 经由alog管理 查看
  • 假设在一个32位little endian的机器上运行下面的程序,结果是多少?

    假设在一个32位little endian的机器上运行下面的程序 结果是多少 假设在一个 32 位 little endian 的机器上运行下面的程序 结果是多少 include
  • 【每日进步一点点】C语言刷题技巧及训练1

    恭喜你发现宝藏 这里是刹那芳间 很高兴为您服务 C语言编程题 相信很多同学学校的C语言考试是上机做编程题叭 不要慌 这里将带你进行一个初步的入门 进行一些简单的编程题练习 Anyway 请一定要去多多实践 上机操作 还有 望具备空杯心态 这
  • React(五)- React组件的组合使用

    React 五 React组件的组合使用 一 Todo案例 1 1 组件的具体实现 1 1 1 Header 1 1 2 List 1 1 3 Item 1 1 4 Footer 1 2 父类App组件的实现 二 Todo案例的总结 Rea
  • opencv形态学操作

    连通性 在图像中 最 的单位是像素 每个像素周围有8个邻接像素 常 的邻接关系有3 种 4邻接 8邻接和D邻接 分别如下图所示 4邻接 像素p x y 的4邻域是 x 1 y x 1 y x y 1 x y 1 N p 表示像素p的4邻接
  • GRE隧道实验

    AR1 interface GigabitEthernet0 0 0 进入接口 ip address 10 1 12 1 255 255 255 0 ospf enable 200 area 0 0 0 200 AR2 interface
  • vue中使用百度webgl地图以及踩坑记录

    前言 在公司项目中 之前使用的是vue baidu map库 功能上使用暂无太大问题 最近需要在项目基础上添加一个大屏数据页面 并涉及到换肤功能 就是在换肤这里遇到了一些坑 使用个性化主题之后 出现 地图加载卡顿 白色方块 图层缩放最大等级
  • Windows使用模拟器启动AOSP源码编译的镜像

    正常情况下 源码编译后可直接执行emulator 启动编译好的镜像 但是如果使用的是server版的ubuntu系统 没有图形界面 或者WSL编译的源码 以及我当前情况 AMD CPU Hyper V ubuntu intel CPU好像没
  • 多线程之创建工作者线程和用户界面线程区别

    转帖 部分原创 1 工作者线程倾向于琐碎的处理 与它不同的是 用户界面线程具有自己的界面而且实际上类似于运行其他应用程序 创建线程而不是其他应用程序的好处是线程可与应用程序共享程序空间 这样可以简化线程与应用程序共享数据的功能 2 典型情况