我现在写了个winForm的程序,开一个线程thread_A,用来读取视频,对视频的帧进行处理,如果满足条件,就保存下来,同时视频会在界面上一帧帧的显示。每保存一帧开启另外的线程thread_B进行处理,程序正常运行后,会有一个thread_A和若干个thread_B。现在遇到了几个问题
1、thread_B处理完帧之后,是自动消亡还是需要我给个结束的标志?资源是系统自动回收的么?
2、如果thread_B正在艰难处理帧的时候,界面上视频的显示就明显的比较卡有没有什么好方法,让界面上的视频流畅的显示?

谢谢啦~~~

解决方案 »

  1.   

    1\需要给个标志如 Thread.Abort();
    2\可以学习xunlei,打开前先缓存一会
      

  2.   

    1。不用你管,执行完就结束了。你要知道什么叫线程,就是独立运行的一个方法,既然是方法,你会在调用完Math.Abs后为此释放什么资源么?不需要吧。
    2.这个要实际看你如何实现的。你看看cpu的占用率。估计你保存的太频繁了。1秒你保存个十几帧,能不慢么。你确认一下先。
      

  3.   

    这是基础中的基础。也是线程的定义。
    new Thread(()=>{MessageBox.Show("a");}).Start();
    运行这句话,你会看到一个对话框提示,这个对话框和你的主线程互不干涉的,当你关闭你的主线程,你会发现程序没有执行完,因为还有线程在运行,你点击对话框的确认,线程就执行完了,程序也就会退出了。调试模式看的比较清楚。
      

  4.   

    我明白你的意思,我是说,当一个线程被创建,它执行完后,分配的内存堆栈也一样会消失?
    直到下一个线程再创建,再由CLR分配新的栈?