今日开发的时候使用jdk自带的运行时变量 RunTime.getRunTime() 去执行bash命令.因为该bash操作耗时比较长,所以使用了Process.waitFor()去等待子线程运行结束. 这个时候发现程序卡在waitFor()没有继续往下执行. 看了官方解释: waitFor:等待子进程执行结束,或者已终止子进程,此方法立即返回.当RunTime对象调用exec方法后,jvm会创建一个子进程,该子进程与jvm建立三个管道连接:标准输入流.标准输出流.标准错误流.假设该子进程不断向标…
在windows下调用_beginthread创建子线程并获得子线程id(函数返回值),如果子线程很快退出,在主线程中调用WaitForSingleObject等待该线程id退出,会导致主线程卡死.需要修改_beginthread为_beginthreadex解决该问题. 那么,_beginthread为何会导致WaitForSingleObject卡死,而_beginthreadex却不会呢?这需要查看两个函数的实现. 历史原因 由于C/C++的历史早于线程的出现,因此C/C++的函数并不都是…
下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?线程函数: DWORD WINAPI ThreadProc(    while(!bTerminate)    {        // 从一个链表中读取信息并且插入到CListCtrl中        // CListCtrl的句柄是通过线程参数传递进来的        for(;;)       {           ReadInfoFromList();           InsertToCListCtrl();       …
title author date CreateTime categories WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 lindexi 2018-10-31 9:30:9 +0800 2018-10-30 14:43:17 +0800 WPF 本文是记录一个线程相互等待导致主线程无法响应的问题,这个问题是属于一定可以复现的问题,是 WPF 的已知问题.如果遇到这个问题,属于暂时没有方法解决,只能规避. 这个问题的最简单复现步骤是在触摸线程,也就是 StylusInput…
记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获取子线程的运行时间". while循环 对于"主线程如何获取子线程总运行时间"的问题,最开始想到的是使用while循环进行轮询: Thread t = new Thread(() -> { //子线程进行字符串连接操作 int num = 1000; String s =…
今天花费了一天的时间来解决这个bug. 这种在程序运行期间出现的问题比较棘手,如果再没有规律的话就更难解决. 还好这个bug是由规律的,也就是说在程序执行半个小时左右后就会因为此异常而导致程序退出:那么在网上找了下原因,无非是说一下几点: 1.把业务放在子线程中去完成,然后通过handler来更新界面 2.通过runOnUiThread的方法来实现 再补充一点就是:优化代码,将不需要重复执行的代码执行一次就ok了,特别是需要绘制UI的代码更不能随便放在重复执行的地方 一.bug现场还原 我的程序…
Android-优化UI性能(1)-降低主线程的堵塞时间 一 降低主线程的堵塞时间 Android已经提供了AsyncTask实现从主线程生成新的异步任务的方法. 定义并实现以下的类就可以(方法由系统自己主动调用): public class DownloadFilesAsyncTask extends AsyncTask<URL,integer,Long> { /* (non-Javadoc) * 后台运行函数 * @see android.os.AsyncTask#doInBackgrou…
Delphi的线程可以通过调用AThread.Synchronize(AProc),可以将Proc放入主线程中同步运行,此时AThread将挂起,直到主线程执行完AProc. 如果有BThread,调用了BThread.Synchronize(BProc),而BProc中释放了AThread procedure TBThread.BProc begin AThread.Terminate; AThread.WaitFor; AThread.Free; end; 此时我们的程序将会卡死,下面的代码…
此文已由作者叶海啸授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. FFmpeg是一个开源免费跨平台的视频和音频流方案,可以快速对音视频流进行多方面的处理,本文主要介绍FFmpeg常用的命令与参数讲解,如何在JAVA中使用FFmpeg以及遇到的一些问题. 背景 项目需求中涉及到有关于视频.音频的一系列处理,包含视频中音频提取.视频首帧提取.音频重采样.字幕压缩的功能,一直在研究ffmpeg,仅仅几个功能,却深受ffmpeg的折磨. 今天谈谈ffmpeg在java中的简单使…
由于产品需要对视频做一系列的解析操作,利用FFmpeg命令来完成视频的音频提取.第一帧提取作为封面图片.音频重采样.字幕压缩等功能: 前一篇文章已经记录了FFmpeg在JAVA中的使用-音频提取&字幕压缩 ,就不再重复说明,今天简单介绍下如何实现第一帧提取.重采样,然后再分享下Process.waitFor()引发的阻塞问题. 一.首先,分享两个命令: 视频第一帧提取:ffmpeg -i [videofile]  -vframes 1 -q:v 2 -f image2  [imagefile]…