小编Gar*_*eld的帖子

C++ 在主线程中处理多个线程

我对多线程有点陌生,所以如果这些问题太微不足道,请原谅我。

我的应用程序需要在一个线程中创建多个线程并从每个线程执行操作。

例如,我有一组文件要读取,比如说 50 个,我使用 CreateThread() 函数创建一个线程来读取这些文件。

现在这个主线程创建了 4 个线程来访问该文件。第一个线程指定文件 1,第二个线程指定文件 2,依此类推。

第一个线程完成读取文件 1 并向主线程提供所需数据后,主线程需要使用文件 5 调用它并从中获取数据。所有其他线程也类似,直到读取完所有 50 个文件。

之后,每个线程都被销毁,最后我的主线程被销毁。

我面临的问题是:

1)如何让线程读取文件后停止退出?

2)如何用其他文件名再次调用线程?

3)我的子线程如何向主线程提供信息?

4)当一个线程完成读取文件并向主线程返回数据后,主线程如何知道哪个线程提供了数据?

谢谢

c++ multithreading visual-studio-2005

5
推荐指数
1
解决办法
6011
查看次数

确定FFT的长度

我正在使用一种工具来比较两个波形文件的波形相似性。例如,我有一个持续时间为1min的波形文件,我使用第一个波形文件制作了另一个波形文件,但是每个5sec数据的间隔为5秒至0。现在,我的软件会告诉您,在5sec至10sec的时间间隔内存在波形差异,15秒至20秒,25秒至30秒,依此类推...

截至目前,通过初步开发,此方法可以正常工作。以下是3个测试集:

  1. 我有两个波形文件,采样率为960Hz,单声道,没有数据采样为138551(1分钟12秒的文件)。我正在使用128点FFT(在128个样本块中拆分文件),效果很好。

  2. 当我对采样率为48KHz,2通道的波文件使用相同的算法时,每个通道均没有数据采样6927361(文件为2min 24秒),过程变得太慢了。当我使用4096点FFT时,过程会更好。

  3. 但是,在22050Hz,2通道的文件上使用4096点FFT,每个通道的数据采样数为55776(文件长度为0.6秒),结果非常差。在这种情况下,128点FFT效果很好。

因此,我对如何确定FFT的长度感到困惑,因此在每种情况下我的结果都是不错的。

我猜长度应该取决于样本数量和采样率。请对此提供您的意见。

谢谢

size audio waveform fft wav

4
推荐指数
1
解决办法
7259
查看次数

标签 统计

audio ×1

c++ ×1

fft ×1

multithreading ×1

size ×1

visual-studio-2005 ×1

wav ×1

waveform ×1