通过大量文件进行多线程处理

时间:2014-01-14 21:19:35

标签: c++ multithreading audio

大家晚上好。 首先,对不起我的英语,我试图更好地了解这种语言。

我有三个文件:

  • Main.cpp - >包含图形界面和两个工人 线。
  • Lettore.cpp - >包含重新组合类型的函数 该文件并使用正确的库来播放音频,也包含 停止,播放,暂停,跳过歌曲的功能。
  • 两个音频代码库 - >解码轨道并将其发送给ao进行播放。

现在,我正在尝试将音频流程与主代码分开。但我不知道如何实现这一点。 我看到C ++ 11参考,我研究了pthreded模块的条件变量,但我该如何实现呢?

例如,在其中一个库音频文件中使用这样的工具是正确的吗?

//mpg123.c
int playmp3(char* filename,int action)
{
    static mpg123_handle *mh;
    static unsigned char *buffer;
    /*...Many Static Dichiaration.../*
    static long rate;
    char* canzone=filename;
        if (action==0)
        {
            /* Inizialize */
            /*...*/
            /* open the file and get the decoding format */
            mpg123_open(mh,canzone);
            mpg123_getformat(mh, &rate, &channels, &encoding);
            /* set the output format and open the output device */
            format.bits = mpg123_encsize(encoding) * BITS;
            /*...*/
            dev = ao_open_live(driver, &format, NULL);
        }       
        if(action==1)
        {
            /* decode and play */
            while (action==1&&mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
                if((ao_play(dev, (char*)buffer, done)==0)&&action==1)
        }
         if(action==2)
        {
                /* clean up */
                free(buffer);
                ao_close(dev);
                mpg123_close(mh);
            /*...*/
        }
}

就像你可以看到我需要extern其他文件中的代码,因为“playmp3”是用C语言写的,“playother”是用C ++写的。

在“Lettore.cpp”中我如何控制音频流?我可以在main.cpp的一个线程中直接包含Lettore.cpp的函数吗?

感谢您的时间

Ps:如果这个问题与规则不一致,我会立即修改这个问题!

编辑:为清楚起见,我还附上了我对Lettore.cpp的尝试

//Lettore.cpp
#include <iostream>
#include "playother.h"
#include "Lettore.h"
extern "C" {
#include "mpg123.h"
}
bool Audio::isMp3(char * nome)
{
        //Reconize if the file is an mp3.
}
void Audio::inizialize(char * filename)
{
    Audio::currentrack=filename;
    Audio::isOpen=true;
    if (isMp3(Audio::tracciacorrente)){
        playmp3(Audio::currentrack,0);
    }else{
        playmusic(Audio::currentrack,0);
    }
}
void Audio::play()
{
    if (isMp3(Audio::currentrack)){
        playmp3(Audio::currentrack,1);
    }else{
        playmusic(Audio::currentrack,1);
    }
}
void Audio::close()
{
    if (isMp3(Audio::currentrack)){
        playmp3(Audio::currentrack,2);
    }else{
        playmusic(Audio::currentrack,2);
    }
    Audio::currentrack=NULL;
    Audio::isOpen=false;
}
void Audio::pause()
{
    if (isMp3(Audio::currentrack)){
        playmp3(Audio::currentrack,4);
    }else{
        playmusic(Audio::currentrack,4);
    }
}
bool Audio::get_openstatus()
{
    return Audio::isOpen;
}

现在问题是一样的:如果这是两个文件的正确实现,我应该写些关于main.cpp的命令来使用这些文件?

0 个答案:

没有答案