`
kofsky
  • 浏览: 201645 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

界面与线程 问题

 
阅读更多

   界面A,接收用户输入

   线程B,有任意多个,由A创建。B有一个状态标志,A通过设置B的状态标签来控制线程B。B实时将执行结果返回给A。

    该怎么设计?

    我现在的设计的是烂的。

  class A extends wxFrame

   {

            DispCtrl dispCtrl; // 显示控件

            createThread()   {   ThreadB *b = new ThreadB(); b->start();     // 创建线程

            ThreadCtrl()         // 控制线程B

            { 

                     b =  findThreadById(id);

                      b.setStatus( status );      // 比如暂停,取消,中止等等

         }

}

class ThreadB

{

    ThreadB( DispCtrl dispCtrl ){  this._dispCtrl  = dispCtrl ;  }// 将显示控件传入线程内部

     void run()

    {

         //  执行计算

          // 在这里实时更新界面显示dispCtrl 的数据

   }

}

界面API是wxWidgets

有相当一部分数据访问需要保证其是线程安全的,采用 wxCriticalSection/wxCriticalSectionLocker 来进行互斥访问,采用 wxMutexGuiEnter/wxMutexGuiLeave 在线程中更新界面显示。

但很奇怪。经常会发生莫名其妙的问题,一个不小心CPU就爆满了,再或者跳出错误。当更新数据去掉wxMutexGuiEnter/wxMutexGuiLeave,错误反而都消失了。

搞不清楚。头都晕了。

分享到:
评论

相关推荐

    MFC多线程 工作者线程 用户界面线程

    使用其他线程修改界面元素可能会导致未知错误,因此需要使用适当的同步机制,如PostMessage或SendDlgItemMessage,从非用户界面线程向用户界面线程发送消息。 四、线程间通信 在MFC中,线程间通信可以通过几种方式...

    界面线程工作线程之间的通讯

    在软件开发中,尤其是涉及到图形用户界面(GUI)的应用程序,界面线程和工作线程之间的通讯是一个重要的设计环节。界面线程,通常被称为主线程,负责处理用户交互和更新UI,而工作线程则用于执行耗时的操作,避免...

    MFC多线程的创建,包括工作线程和用户界面线程

    #### 四、多线程与定时器的关系 ##### 4.1 定时器的作用 定时器是一种特殊的系统资源,它可以定期向线程发送特定的消息。在MFC中,定时器通常用于周期性地执行某些任务或刷新用户界面,例如: - **启动定时器**:...

    mfc编写的用户界面多线程的小例子

    多线程解决了这个问题,将耗时操作放在后台线程执行,主线程则继续处理用户交互。在MFC中,可以使用CWinThread类来创建新线程,它是所有线程类的基础。每个线程都有自己的消息队列和消息循环,可以独立处理任务。 ...

    MFC用户界面多线程工程案例

    总结来说,“MFC用户界面多线程工程案例”是一个实践教程,它展示了如何在MFC应用中有效地使用多线程,以及如何处理与用户界面交互相关的并发问题。通过学习这个案例,开发者可以掌握创建和管理用户界面线程的关键...

    用户界面多线程

    用户界面多线程是软件开发中的一个重要概念,尤其是在创建高性能、响应迅速的桌面应用程序和移动应用时。在单线程环境中,用户界面(UI)的更新和后台任务处理通常是同步进行的,这意味着当一个耗时的操作正在进行时...

    MFC 多线程应用, 包括工作线程, 用户界面线程

    为了保持用户界面的响应性,所有与UI相关的操作都应在用户界面线程中进行。 3. **创建MFC线程**:使用MFC创建线程,一般需要继承`CWinThread`类并重写`Run()`方法。创建新线程时,调用基类的`CreateThread()`函数,...

    MFC用户界面线程的创建示例

    4. **工作线程与用户界面线程的通信**:为了报告文件复制的进度,我们需要在工作线程中更新UI。MFC提供了一些机制,如PostMessage或SendDlgItemMessage,允许线程间安全地发送消息。工作线程发送消息,用户界面线程...

    MFC用户界面线程与工作者线程

    本文将深入探讨"MFC用户界面线程与工作者线程"这一主题,旨在帮助线程初学者理解如何有效地利用线程来提高程序性能和用户体验。 首先,我们了解线程的基本概念。线程是操作系统分配CPU时间的基本单位,一个进程中...

    UI界面多线程简单实现和线程捕获异常问题

    本文将探讨如何在UI界面中简单实现多线程以及如何处理线程中的异常问题。 首先,我们需要理解在UI界面中使用多线程的基本概念。主线程通常负责处理用户交互和绘制UI,而后台线程则处理计算密集型任务。在Windows...

    C# 线程更新UI界面

    2. **线程与UI交互的问题** - 线程同步问题:多线程环境下,对共享资源(如UI控件)的访问需要同步,否则可能导致数据不一致。 - 界面更新限制:非UI线程不能直接修改UI元素,否则会抛出`CrossThreadException`...

    创建MFC用户界面线程

    MFC用户界面线程是应用程序中的关键组件,用于处理与用户交互相关的事件,如鼠标点击、键盘输入等。本教程将深入探讨如何创建和管理MFC用户界面线程,并通过提供的UIThreadDemo工程源码来进一步理解其工作原理。 ...

    MFC创建用户界面线程方法2

    在MFC(Microsoft Foundation Classes)框架中,创建用户界面线程是实现多线程应用程序的重要步骤,特别是当需要在后台处理耗时任务而不影响主线程(通常负责UI更新)的响应性时。本主题将详细讲解如何不使用`...

    C#多线程解决界面卡死问题的完美解决方案_极简版

    总结来说,C#中多线程解决界面卡死问题的方法主要包括使用BackgroundWorker和async/await模式。这两种方法都旨在将耗时操作与UI更新分离,确保用户界面始终响应。理解并熟练运用这些技术,能够显著提升C#应用的用户...

    界面线程创建

    在这个主题中,我们将深入探讨界面线程的重要性、创建方法以及与其他线程的协作。 首先,UI线程的主要职责是维护窗口和控件的显示状态,响应用户的鼠标点击、键盘输入等事件。由于Windows消息机制的设计,所有的GUI...

    C#多线程解决界面卡死问题的完美解决方案

    总结,通过理解并运用这些多线程和异步编程技术,开发者可以在C#中有效地解决界面卡死问题,提高用户体验。然而,使用多线程也需注意线程安全和资源管理,避免引入新的问题。在实践中,选择最适合场景的技术是至关...

    C#多线程刷新界面

    标题"**C#多线程刷新界面**"指出了我们讨论的核心问题:如何在C#中利用多线程来更新用户界面。在Windows Forms或WPF应用程序中,主线程通常负责处理UI事件,而当主线程被其他长时间运行的任务占用时,用户界面就会变...

Global site tag (gtag.js) - Google Analytics