MFC 程序是单线程还是多线程?

发布于 科技 2024-06-10
11个回答
  1. 匿名用户2024-01-29

    Windows 操作系统基于消息传递机制运行。

    Windows操作系统为每个线程维护一个消息池,并将接收到的消息(例如,鼠标点击,键盘按下)存储在消息池中,然后不断检索消息并将其传递给需要处理消息的函数(例如,按钮按下的功能)。

    通常,如果 f1() 和 f2() 在同一个线程中,则会按照消息的顺序触发相应的 f1 或 f2。 在另一次运行之前,不会触发第一次触发的运行。

    如果您在两个不同的线程上,则在消息到达后将立即触发相应的 f1 或 f2,并且看起来 f1 和 f2 同时运行。

    默认情况下,典型应用程序是单线程的。

  2. 匿名用户2024-01-28

    标准过程是单线程。

    你说的与线程无关,它是一种 Windows 消息机制。

    在同一个消息环中,常规消息逐个执行,必须等待上一条消息结束。

  3. 匿名用户2024-01-27

    我更喜欢使用多线程,最简单的方法就是要有效率,比如我们在一个程序中只使用一个主线程,而且我们一次只做一件事; 而如果我们打开多条线程,我们可以同时做多件事而不会相互干扰,我们每个人都可以做自己的工作。

    多线程就像一个多任务操作系统,我们可以同时听**和上网,而单线程就像单任务,我们需要听**然后上网,所以需要更长的时间。

    比如你的程序需要不断更新某条数据,那么你可以为它开一个线程,让它无限循环,每隔一段时间在后台进行更新,而主线程还在不停地和用户交互,有个线程是不是很方便?

    这就是我的理解。

    还有一个地方是线程比较通用的,比如在我们的程序中,有一个比较耗时的功能,比如读取一个庞大的数据库中的信息,计算数据,比较费时,那么我们就要为它开一个线程,让它在后台工作,当主线程在和用户做其他事情的时候, 这个线程会悄悄地处理来自后台的数据,这样用户就不必等待,也不会觉得你的程序运行缓慢;通常超过 5 秒的等待时间会为其打开一个线程。

    这就是它的全部内容

  4. 匿名用户2024-01-26

    这应该是一个网络程序...

    确实可以使用没有多线程的异步网络通信模式,这样在等待接收数据时不会阻塞土地,也省去了线程同步的麻烦。 只是你提到的这个例子是用多线程来写一个字段,**在程序中阻塞接收消息,一个线程处理一个固定人的消息,结构简单。

    对于宋振通的单核计算机来说,每个时间点只有一个线程在运行,CPU不断切换线程,让每个线程都有机会运行。

    现在电脑多核很普遍,多线程可以充分发挥CPU的效率,多个CPU核可以同时运行多个线程,速度更快。

  5. 匿名用户2024-01-25

    使用以下参数和返回值编写线程函数。

    uint threadtest(lpvoid pparam);

    然后使用以下功能直接在按钮中启动线程。

    afxbeginthread(threadtest,null);

  6. 匿名用户2024-01-24

    在将处理数据的地方,使用 afxbeginthread 创建一个线程,它只是一个 MFC 封闭的全局函数,您可以查找它并注意过程函数必须是静态的或全局的。 然后,通过 afxbeginthread 的参数将数据传递给 procedure 函数进行处理。 至于计算结果。

    建议您使用向主窗口发送消息通知的方法。

  7. 匿名用户2024-01-23

    MFC 线程创建函数:afxbeginthreadwin32 线程创建函数:createThreadcrt 线程创建函数:

    BeginThread Beginthreadex 可以以所有三种方式使用。

  8. 匿名用户2024-01-22

    在 Windows 下成为服务器的最佳解决方案是 iocp(i o complete port),中文名称 i o complete port。

    性能非常好。 说到Windows高级编程,难度指数比较高。

    你觉得这个解决方案是不可行的:

    1.大量的CPU时间将被浪费。 如果计算机只有 2 个 CPU,但有 200 个线程处于打开状态,则计算机的 CPU 数量有限。

    此时,最多有 2 个线程同时运行(因为你只有 2 个 CPU),但线程的不断切换让你感觉好像所有 200 个线程都在运行,但速度很慢。 (此时线程切换会消耗大量的CPU时间,收益大于损失)。

    2.浪费内存。 线程需要用 Windows 中的数据来表示,200 个线程,开销有点浪费(虽然现在内存很大,但我们不能浪费它)。

    3.线程同步问题会让你头晕目眩,200个线程并发处理很麻烦,要做到线程同步,以及线程通信,同步通信是多线程必须考虑的事情。

    4.iocp ---有一个非常好的解决方案

    网上有很多关于IOCP研究的资料,这里就不多说了。

    enjoy coding

  9. 匿名用户2024-01-21

    问题描述不明确,二楼好,知识长。

  10. 匿名用户2024-01-20

    使用 suspendthread() 和 resumethread() 函数,您可以挂起和唤醒一个线程,该线程可以由另一个线程调用,也可以由它自己调用。

    sleep 也称为楼上的 sleep() 函数或 sleepex 函数,它只是暂时暂停线程以与用户交互的指定事件时间段。 当然,休眠也是暂停的,这个暂停时间是无限期的,需要 resumethread()。

    归根结底,冬眠和睡眠被暂停,这只是一个不确定的时间以及是否需要醒来的问题。 睡眠需要被线唤醒,到了睡觉的时间,你自己醒来,这就是区别!

  11. 匿名用户2024-01-19

    首先,我想强调一点:你这里有主线程和新线程,它们都存在于你的程序进程中,这个问题不涉及主进程、子进程什么的,不能混淆进程和线世界的概念。

    即使新线程没有使用睡眠功能,UIS 仍然无法响应新线程中更新 UI 的操作。 Windows线程可以分为UI线程和工作线程,主线程是UI线程,负责所有响应用户输入和绘图窗口界面的人机交互工作,新创建的线程是工作线程,只负责计算,不处理人机交互。 所以什么时候响应接口的更新是由你的主线程决定的,如果主线程还在执行一个函数,没有返回消息循环,它就无法更新接口,而当函数执行时,接口就可以更新了。

    防止线程中断是一个线程同步问题,与此处的问题无关。 Windows 提供了一系列线程同步 API,您可以使用用户级线程同步 API,例如使用事件、信号量、互斥锁等的自旋锁、关键区域、纤细读写锁、条件变量或内核同步对象。 具体原理和使用方法无法用几句话讲清楚,可以阅读操作系统教学纯材料和“Windows 核心编程”中关于多线程的章节。

相关回答
12个回答2024-06-10

您不是新安装的,也不是恢复到系统的。

这是由系统中的几个文件错误,损坏引起的。 >>>More

6个回答2024-06-10

1.选择计算机上的任意软件,单击鼠标选择该软件,然后右键单击以管理员身份运行。 >>>More

7个回答2024-06-10

main()

int i,j,x=0;初始化 x=0for(i=0; i<2;i++) >>>More

10个回答2024-06-10

这没什么大不了的,如果终止并重新打开就好了。

12个回答2024-06-10

蓝屏基本上是游戏系统,硬件不兼容,或者配置不够,房东,你运行某个程序很久了,甚至可能中毒。 >>>More