GNU hello学习笔记(1)——autoconf和automake
一个类型提升引发的bug

多进程下载歌词尝试失败

Tiger Soldier posted @ 2009年10月13日 04:09 in 程序设计 with tags osd-lyrics , 4991 阅读

OSD Lyrics的一个最大的问题就是它的单进程单线程模型,这使得它在搜索和下载歌词的时候会阻塞正常的歌词显示,导致在下载未完成时切换歌曲会出现无响应的情况。

由于基础太弱,这个问题一直被我搁着,直到把APUE的前17章都看了一遍,对Unix系统下多进程/线程有了大概的了解,终于开始着手改造下载模块了。为了不影响主分支的开发,我在之前就已经创建了一个branch用于尝试异步下载的实现。

本着KISS的原则,第一个想法非常简单:

  1. 在准备下载时,fork出一个进程,父进程直接返回,子进程继续执行下载任务
  2. 子进程下载后直接中止进程
  3. 父进程在收到SIGCHLD信号后检查当前正在播放的音乐的歌词是否已被下载

这个想法,如果不涉及GUI,是可以很好地工作的,但是一旦要显示一个GUI让人选择要下载的歌词,就直接崩溃了。看来X相关的东西不能直接fork来多弄出一份,不过这也是很自然的。

看来之前建了一个branch是明智的,这个要折腾的时间确实比较长。

于是接下来似乎只有两条路可以走了:

  1. 用glib来创建一个线程,再想办法在搜索和下载成功时向主线程的消息循环插入一条消息
  2. 研究curl相关的异步下载方法

又要开始看文档鸟>_<

ABitNo 说:
Oct 25, 2009 05:59:18 PM

不错啊,非常支持


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter