使用C++11安全的在线程中控制UI

本篇文章由:http://www.sollyu.com/using-the-c11-secure-online-process-control-ui/

说明

首先这里使用的是 Visual Studio 2015, 主要是它支持的C++11更好,其它的我就没有去研究了,想必 Visual Stuido 2010 也差不多吧。

步奏

  1. 创建一个MFC对话框工程
  2. 绘画界面如下图

  3. 添加变量

  4. 添加事件代码

代码

添加头文件#include <thread>, 在按钮事件中添加代码

void CMFCApplication1Dlg::OnBnClickedButtonStart()
{
    m_wndProgress.SetRange( 0, 99 );
    m_wndProgress.SetStep( 1 );
    m_wndProgress.SetPos( 0 );

    /* 创建一个线程 */
    std::thread t( [=]
    {
        for ( size_t i = 0; i < 100; i++ )
        {
            m_wndProgress.SetPos( i );

            /* 为了更好体验在线程 */
            Sleep( 10 );
        }

        /* 在UI线程中显示对话框 */
        MessageBox( _T( "完成\n http://www.sollyu.com \n 欢迎光临" ), _T( "提示" ), MB_ICONINFORMATION );
    } );

    /* 将子线程从主线程里分离,子线程执行完成后会自己释放掉资源 */
    t.detach();
}

截图

时间: 2024-10-27 12:22:58

使用C++11安全的在线程中控制UI的相关文章

Android开发之在子线程中更新UI

转自第一行代码-Android Android是不允许在子线程中进行UI操作的.在子线程中去执行耗时操作,然后根据任务的执行结果来更新相应的UI控件,需要用到Android提供的异步消息处理机制. 代码如下: 1 public class MainActivity extends Activity implements OnClickListener { 2 private static final int UPDATE_TEXT=1; 3 private TextView textView;

为什么我们可以在非UI线程中更新UI

尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 看到这样的标题--估计N多人会说我是逗比----因为很多盆友在学习Android(特别是从4.0之后开始入门的)的时候都会常看见或听到别人说我们更新UI呢要在UI线程(或者说主线程)中去更新UI,不要在子线程中更新UI,而Android官方呢也建议我们不要在非UI线程直接更新UI,为什么呢?借助Android官方的一句话来说就是:

Android 非UI线程中更新UI

Android 非UI线程中更新UI runOnUiThread(new Runnable() { public void run() { onDown(null); } });

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加

android 不能在子线程中更新ui的讨论和分析

问题描述 做过android开发基本都遇见过ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是只能在主线程中更改ui,子线程要修改ui只能post到主线程或者使用handler之类.但是仔细看看exception的描述并不是这样的,"Only the original thread that created a view hierarchy can touch its views",只有创建该 view 布局层次的原始线程

使用Handler在子线程中更新UI

Android规定只能在主线程中更新UI,如果在子线程中更新UI 的话会提示如下错误:Only the original thread that created a view hierachy can touch its view((只有原来的线程创建一个视图层次可以触摸它的视图). 只能在主线程中更新UI的原因是:android中相关的view和控件不是线程安全的,我们必须单独做处理. 有的时候需要再子线程中实现更新UI,下面介绍使用Handler实现线程通信的特点实现在子线程中更新UI. H

Android开之在非UI线程中更新UI

当在非UI线程中更新UI(程序界面)时会出现如下图所示的异常: 那如何才能在非UI线程中更细UI呢? 方法有很多种,在这里主要介绍两种: 第一种:在需要更新UI的代码行后加Looper.prepare();与Looper.loop();两句话即可.如: new Thread(){ @Override public void run() { // TODO Auto-generated method stub txtRotation.setText("在非UI线程中更新UI!"); Lo

Android在非UI线程中更新UI的方法

1.使用Thread+Handler实现非UI线程更新UI界面 private MyHandler mHandler = new MyHandler(); ...... mHandler.sendResult(MyHandler.UPDATE_VIEW, null); ...... private class MyHandler extends Handler{ private static final int UPDATE_VIEW = 0; @Override public void han

C# WINFORM 线程中更新UI

幸好今天是周末,有时间把这个问题记录一下.在多种语言之间切换,发现开发效率降的很低了,开发成本都集中到调式上了,C/C++这些放弃很久了,突然感觉线程这个问题搞的有点烦躁 我这里提到的线程中更新UI,在大数据 大并发,以及CPU时间碎片上,未经过验证,项目紧 你懂的..如果你和我一样急于实现 可以考虑一下 总体是这样 //NetDataHandler 是被非UI主线程调用的 你现在看到到这两个函数是放在UI窗体上的 public void NetDataHandler(string jsonDa