精华内容
下载资源
问答
  • 多线程加载
    千次阅读
    2017-03-31 16:28:45

    在之前的程序中,已经实现了基本的加载,但是大家知道纹理的加载实在太慢了,整个界面都是卡死的状态,所以得想办法实现多线程加载纹理;

    我的想法是一个线程先将没有纹理的图形读取出来,另一个线程读取纹理,读取出来以后再重绘实现多线程绑定纹理功能~


    由于OpenGL中不支持直接多线程的操作~所以需要曲线救国~~

    在博客园里找到了一位兄弟的博客OpenGL多线程创建纹理,经过他的启发,实现了在Qt中的多线程加载纹理,不过需要修改一处关键地方:

    hDC = wglGetCurrentDC();
    //hRC = wglGetCurrentDC();//此处不正确~
    hRC = wglGetCurrentContext();
    hRCShareing = wglCreateContext(hDC);

    需要将hRC的获取方式改成当前上下文,而不是通过hDC获取。

    需要源码的同学请移步我的gitHubhttps://github.com/Shen001/MultilThread-LoadOBJ.git,如果对您起到了帮助,请不要吝啬您的star;如果有疑问也可以直接留言~!

    更多相关内容
  • Pytorch Load Dataset 多线程加载读取数据 单线程读取数据时 以agnews dataset为例,num_worker=1时读取时间如下: Load Test Data Spends 12.183895587921143 seconds Load Test Data Spends 200.42685055732727 ...

    Pytorch Load Dataset 多线程加载读取数据

    单线程读取数据时

    以agnews dataset为例,num_worker=1时读取时间如下:

    Load Test Data Spends 12.183895587921143 seconds
    Load Test Data Spends 200.42685055732727 seconds

    DataLoader(dataset, num_workers=2,collate_fn=collate_fn)

    Load Test Data Spends 11.577017307281494 seconds
    Load Train Data Spends 199.58622908592224 seconds

    DataLoader(dataset, num_workers=4,collate_fn=collate_fn)

    Load Test Data Spends 11.68491816520691 seconds
    Load Train Data Spends 183.27479600906372 seconds

    DataLoader(dataset, num_workers=8,collate_fn=collate_fn)

    Load Test Data Spends 11.205335140228271 seconds
    Load Train Data Spends 183.1354115009308 seconds

    此时限制为GPU,CPU加载的矩阵 → \rightarrow GPU流水线。流水线处理时间是定死的。

    GPU多卡:

    • 真2014

      多个GPU一起处理2014条数据。

    • 假1024

      多块GPU按块各处理总数据的一部分,最后汇总算loss平均值

    展开全文
  • C#多线程加载控件界面卡死的解决

    千次阅读 2022-01-14 20:29:03
    执行结果终于达到效果,无论这个耗时操作慢,主界面一点都不卡,可以拖动窗口,可以最大化最小化,可以操作滚动条,可以点击其它按钮,当然也可以点某个按钮终止当前耗时操作……

    先听一个故事:

    有一个老板忙不过来,于是招一个员工去负责某些事务。这样老板就可以腾出时间处理其它事。

    后来发现员工干不下去,原因是干活需要花费,没有老板的认可,财务不给批钱。这是原则。

    于是老板设计了财务审批制度,要求员工涉及到报销的时候,要回公司处理审批。

    结果员工干脆守着老板办公,随时征求老板的意见。于是老板还是很忙,没办法干别的事。

    所以需要改善员工的工作方法,把有关财务报销的事总结并提炼出来,必要的时候才回来报销,没必要的时候不用总守着老板。于是老板终于可以时间自由了。

    这个故事其实就是多线程的原理。老板就相当于主程序的UI线程,负责响应一些外来事务,员工就是线程,干一些具体耗时的工作。

    我已经不是个称职的程序员了,所以高手可以略过,希望本文能给刚学习多线程编程的朋友一些启发。

    曾经羡慕那些成熟大师的作品,它在执行一个耗时很长的任务时,而它的界面又是可以灵活操作的。我最初的想法,希望线程各干各的活,耗时的过程用一个独立的线程实现,而后线程之间可以完全对象化互相访问,比如跨线程访问控件。原以为这样就可以用独立的线程更新界面了,而且主线程(UI线程)不卡顿,这是多美好的憧憬。就跟故事中那个老板的最初想法一样美好。

    自己一开始写多线程的时候,看了概念和文章,着手尝试的时候,但还是遇到了故事中那位老板的困惑。所以,我最后解决的方法,也跟这位老板一样:员工干自己的事,没有必要别总占用老板的时间。

    关于耗时

    各种I/O最耗时。比如读写磁盘,重绘界面,网络连接等。本文以更新界面为例说明。单线程的时候,一般有个单独的方法来加载界面。这是需要多线程处理的地方。

    关于基础概念

    进程、线程、时间片、异步、委托、代理……我建议不要往里钻,不结合实践可能一看就会,一做就废。所以这点——略!

    我们只要知道,所谓UI线程,就是主进程这条线,初始化界面的线程,如果不用多线程的话,平时写的程序都是单线程的,就一个UI线程。

    关于线程池

    如果可能,尽量不要频繁创建和销毁线程,比较消耗资源。利用线程池。(现在硬件水平都还可以,如果是硬件资源非常宝贵的平台,恐怕从定义变量和数组就要考虑资源分配的问题了。)

    如果一时理解不了,无视就行了,new thread一样用,先看到效果,再说优化。一位有名的讲师说过,任何成功的作品,都不是一次成型的,逐渐迭代完善是必然的。

    关于invoke

    原则:不能跨线程访问控件,要用委托和invoke。相当于故事中的财务报销制度,原则就是没有老板批准,员工不得擅自动用公司资金。

    但网上的例子也仅仅是例子,真用起来照样卡。比如我们把UI线程里加载界面的方法函数,新建一个线程去异步回调它。其实用处不大的。其实后来发现这是一种混沌的想法。

    sleep:有人建议大循环时不时用一下Thread.sleep(0),阻塞当前进程,让出时间片给UI线程是吧?光写这个没用的,因为当前线程太耗时了,总是刚让权就拿回,系统让它抢占,所以没戏。sleep多少秒都不行。

    DoEvents:有人建议用Task.Delay()或者Application.DoEvents()取代sleep,我试过,DoEvents最明显,一是效率低,二是没解决实际问题,当处理耗时操作的时候,主界面是可以响应操作不死机,但是它会阻塞这个耗时线程,比如你按住滚动条,以为它滚动的同时加载过程还是继续走是吧?不行的,它就暂停了,你松开鼠标别动主界面它才继续。所以不建议用。

    BackGround:甭想,没用的,这不是重点。

    BeginInvoke:这是重点,主要看怎么用。先看看官方的解释:“在创建控件的基础句柄所在线程上异步执行委托。”这里面,所谓“在创建控件的基础句柄所在线程”也就是UI线程。就是不管在哪用invoke都是临时切换到UI线程来执行的。相当于员工要申请资金,必须回公司找老板办理。

    所以,需要更新界面的时候,想当然新建一个线程,通过委托和invoke去调用它的入口方法,等于整个业务还是在UI线程执行的,所谓的新线程等于多此一举。我之前说这是混沌的想法就在于此了。相当于员工为了遵守财务制度,时刻守着老板干活,等于白招了这个员工。所以就有了解决思路:

    1,这个用于更新界面的耗时方法,我们希望它在子线程中执行,不能有直接更新控件的操作(不止一次强调,这是原则,需要使用委托异步回调)。有关控件操作的部分要简化,减少跟控件的互动,尽量高效处理(其实单线程也该如此的)。而且要提出来做第2步。员工需要规范化自己的工作流程,提高效率。

    2,为每一个与控件互动的操作,单独写一个方法,以便调用。切记,这个单独的方法用于更新控件,也就是必然是在UI线程中执行的。这是原则。员工需要提炼有关财务审批的环节。

    3,在耗时方法中,凡是涉及到操作控件的地方,用BeginInvoke方法去异步调用上面第2步中UI线程中的方法。员工必要的时候才去找老板审批。 

    4,除了上面第3步中的地方,这个耗时方法的执行进度,与UI线程是无关,直接放在新线程中执行就好了。员工干活,没必要的时候不用总麻烦老板。

    执行结果终于达到效果,无论这个耗时操作多慢,主界面一点都不卡,可以拖动窗口,可以最大化最小化,可以操作滚动条,可以点击其它按钮,当然也可以点某个按钮终止当前耗时操作……相当于老板终于有时间处理其它事务,员工可以独立工作了。

    然后就可以做我们想做的了。比如,执行耗时操作时,不希望那些按钮可以点,要在合适的时机控制它的Enable属性。这个要写在子线程里,用invoke去调用,写在主UI线程没用的。因为我们已经实现UI线程的完全自由了,它既然已经新开一个线程去干复杂的事了,那就只能等那个线程执行完才能恢复Enable状态。所以写在子线程里是比较合理的。

    下面我把我的代码贴出来,这是我写的,整理孩子照片用的小程序,加载过程用了我说的方法,关键地方绿字做了说明,效果如期而至。不对的地方多指正。

    最后给一个建议:各种命名规则见名知意不用说了,主要是方法的命名,凡是子线程里执行的方法,我都加了Thread_前缀,我觉得这有助于梳理思路,多线程编程,千万别乱。

    展开全文
  • 多线程加载图片
  • ListView避免多线程加载一个同一资源
  • OGRE多线程加载

    2012-03-25 15:27:36
    OGRE多线程的模型后台加载方法,不是特全面,集合了网络上的资料。自己研究研究还能做的出来
  • 多线程图片加载是使用 cpu,非gpu时,需重新下载pytorch gpu版: 1.conda list命令 (上图torch显示版本是:1.6.0+cu101,如果你显示的是1.6.0,表示你安装的是cpu版本) 2.链接...

    多线程图片加载是使用 cpu,非gpu时,需重新下载pytorch gpu版:

    1.conda list命令

    (上图torch显示版本是:1.6.0+cu101,如果你显示的是1.6.0,表示你安装的是cpu版本)

    2.链接https://pytorch.org/get-started/previous-versions/去搜寻对应版本装载,

    pip install torch==1.9.0+cu102 torchvision==0.10.0+cu102 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

     

    展开全文
  • 使用python多线程加载模型并测试

    千次阅读 2019-11-14 15:43:46
    但是现在需要处理比较大量的数据,如果进行线性处理,可能测试一次就花10个小时,而且还不知道结果怎么样,所以多线程就必须使用上了。有关线程部分主要参考:https://junyiseo.com/python/211.html 1 多线程 ...
  • 使用多线程加载数据进度窗体,在窗体打开的时候执行,显示进度窗体,并可以在中途取消。
  • WinForm使用多线程异步加载界面数据

    千次阅读 2020-06-19 09:58:25
    WinForm使用多线程异步加载界面数据 处于学习阶段,做个记录,如有写错,请多多指教。 private void FrmQC111_Load(object sender, EventArgs e) { Thread load = new Thread((obj) => { //创建一个新...
  • pytorch多GPU训练以及多线程加载数据

    万次阅读 2018-01-22 20:37:03
    既然说到了GPU,顺便说一下加载数据时的进程吧: data_loader = data.DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=6, pin_memory=True, drop_last=True, collate_fn=patch_data...
  • 多线程异步加载数据过程

    热门讨论 2013-01-03 20:32:15
    利用异步调用,及跨线程的处理技术,完全可以在不同线程或窗体上来显示加载数据过程,并在加载过程,可以随时终止,全过程实用用很强!
  • Tensorflow 多线程与多进程数据加载

    千次阅读 2019-03-24 01:59:00
    在项目中遇到需要处理超级大量的数据集,无法载入内存的问题就不用说了,单线程分批读取和处理(虽然这个处理也只是特别简单的首尾相连的操作)也会使瓶颈出现在CPU性能上,所以研究了一下多线程和多进程的数据读取和...
  • C# 多线程 异步加载 窗体

    千次阅读 2019-01-04 20:29:33
    C# 多线程 异步加载 窗体 2014年05月28日 16:57:08狂奔小蜗牛阅读数:10709 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongzhe2011/article/details/27351853 我们在使用 ...
  • delphi多线程调用dll

    热门讨论 2011-08-28 12:00:08
    delphi多线程调用dll delphi多线程调用dll 有点复杂
  • opencv多线程读取录像并显示问题

    千次阅读 2022-04-07 19:18:55
    opencv imshow 多线程 视频帧混合
  • [Unity]AssetBundle资源更新以及多线程下载

    万次阅读 多人点赞 2017-09-03 09:04:07
    前言此文章适合不太了解资源加载的萌新,有了入门基础之后再去github上搜大牛写的专业的资源加载方案才能得心应手,不然的话会看的很吃力或者说一脸懵逼。Unity里面关于资源加载我们都知道是下载更新AssetBundle,...
  • Qt多线程和信号与槽加载多张图片

    千次阅读 2015-08-01 22:13:13
    因为图片数量比较多而且图片比较大,所以我用QT的多线程以及信号与槽方法加载图片,加载图片的总体思路如下: 1、主线程调用QThread的子类的start函数 2、在run函数中每次加载一张图片,并且以emit image(const ...
  • javascript-js实现多线程

    千次阅读 2018-10-23 15:56:40
    假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让用户进行等待,在等待的过程中,整个js线程会被阻塞,后面的代码不能正常运行,这可能大大的降低用户体验,这时候我们就期望拥有...
  • 浅谈Cesium多线程渲染问题

    千次阅读 2020-04-05 20:42:18
    在Cesium中实体的加载卸载是多线程的,这里不说是异步,因为js中的异步不是多线程。由于上述操作为多线程的缘故,所以不可避免的会因为忽视它而出现一些问题,这在绘制编辑图形中极为常见。 例如,你已经调用了移除...
  • 实现多线程加载plist功能,需掌握知识: 1.多线程开启:pthread 2.如何在线程中加载plist 一.多线程开启 当我们想在程序中开多线程中,第一想到的是cocos2d-x有没有自带方法,幸运的是我们找到了CCThread,...
  • Qt多线程方法1 继承QThread 1写一个继承于QThread的线程 2 QThread的几个函数quitexitterminate函数 3 正确的终止一个线程 4 如何正确启动一个线程 41正确的启动一个全局线程和UI一直存在的线程 42 如何启动一...
  • 加载图片以及多线程

    千次阅读 2011-10-09 19:16:10
    本篇说明一下,列表加载大量的图片,以及多线程在这边的应用。 这里主要是几个问题会非常麻烦,需要我们去处理 加载图片完成后即时刷新 加载了大量的图片,却不会发生内存的溢出,OutOfMemory 多级的缓存...
  • cococs2d-x 多线程加载plist

    万次阅读 2013-03-06 11:47:12
    实现多线程加载plist功能,需掌握知识: 1.多线程开启:pthread 2.如何在线程中加载plist 一.多线程开启 当我们想在程序中开多线程中,第一想到的是cocos2d-x有没有自带方法,幸运的是我们找到了CCThread,...
  • 前几天遇到一个很有意思的问题,提炼出来就是使用多线程去读取文件的话会加快读取速度吗? 在往下看之前先自己想一想,同样如果在面试中问你这个问题该怎么回答呢? 假设有一个文件大小为10G,我们需要将其读取到...
  • ListView多选框 动态加载 多线程刷新进度条
  • 项目中摘抄出来的代码,在LoadingLayer::onEnter()中,开了一个boost thread来加载资源
  • PyQt5 多线程添加进度条

    千次阅读 2018-12-15 23:26:50
    按钮后加载模型计算,pyqt界面卡住等待计算结束。目的是添加进度条,优化用户等待。一开始以为添加进度条加上时钟就行,调试后发现把计算部分写在主界面类里,计算和进度条无法一起进行。 解决:需要把计算部分分离...
  • 微信小程序多线程处理机制worker

    万次阅读 2018-05-23 10:12:17
    不少从事开发岗的技术人员都了解过多线程问题,多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。在小程序中也...
  • flask keras 多线程环境下加载模型

    千次阅读 2019-05-06 14:01:15
    keras 多线程环境下加载模型 Tensor Tensor is not an element of this graph. 问题场景 keras 使用flask 发布深度学习模型服务,模型有一个定时任务(新开了一条线程)来进行训练以及重新加载,出现了错误。 Tensor...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 602,767
精华内容 241,106
关键字:

多线程加载

友情链接: fft102.rar