新しいPCで、Jyaiko1.1を試す for(i=0;i<2048;i++) data->arranged_fft[4096+2*i]
=data->result[2*i]; } for(int
i=0;i<2048;i++) data->arranged_fft[4096+2*i]
=data->result[2*i]; }
新しいPCは、やはり性能がよい... 70frames/sec
1.新しいPC
3年使ったのか、5年だったのか、忘れましたが、PCを新調いたしました。
で、何も改良を加えないで、Jyaiko1.1をインストールしました。(ASIO4ALLだけ、インストールしました)
ですので、グラフィックカードも、サウンドカードも入っていません。
結果は
以前、皆様にご指摘いただいた通り、
しばらく作動するのですが、1分くらいすると、スーと、画面が消えて、音声も聞こえなくなりました。
これやったんか.....
やっと、理解できました。
以前のPCは、以下の通りですが、何の不都合も発生しませんでしたけんど...
2.原因は何や?
早速、VisualStudio2005 をinstallして、原因を探りました。
どうも、global変数に頼りすぎていたようです。
私のプログラムは、threadを5つ位、立てていますが、global変数は、全てのthreadから、アクセス可能なのです。
これが、どうも、まずいらしい.....
で、threadを立てるときに、
g_thread=::CreateThread(NULL,0,myThread,(LPVOID)&data_origin,CREATE_SUSPENDED,&d);
可能な限り、 data_origin構造体 に、データを詰め込みました。(全部の変数は、ちょっと無理なんやけど)
それと、ひとつのthread内では、できるだけ、局所変数を使うようにしました。
たとえば、int i なんかも、面倒なので、global変数にしておいて、thread内では、宣言せずに
//arrange
FFT
{
data->arranged_fft[2*i]
=data->result[4096+2*i];
data->arranged_fft[2*i+1]=data->result[4096+2*i+1];
data->arranged_fft[4096+2*i+1]=data->result[2*i+1];
みたいに、してたのですが、local変数にして、thread内から、出来る限り、global変数を呼び出さないようにしました。
//arrange
FFT
{
data->arranged_fft[2*i]
=data->result[4096+2*i];
data->arranged_fft[2*i+1]=data->result[4096+2*i+1];
data->arranged_fft[4096+2*i+1]=data->result[2*i+1];
それから、関数のネストも、極力避けました。
ほんまやったら、classを作るのが、一番いいような気がしますね。
まあ、とにかく、そんじゃらこんたらで、何とか安定して参りました... 汗
(^_^;;
今、バグfix しとります.....
3.同じ、Windows XPでも、微妙な違いがある
古いPCも、新しいPCも、OSは、windowsXP service
pack2です。
しかし、微妙な違いがあります。
これに気付いたのは、私のプログラムでは、cpu使用率を表示しているからです。
これには、pdh.dllを利用していますが、新しいPCでは、表示されなくなってしまったのです。
新しいPC パフォーマンスモニタ 古いPCのパフォーマンスモニタ
古いPCで表示されていた Processor
の項目が、新しいPCでは、見つからないのです。
新しいPCでは、Processor の項目に相当するのが、Processor
Performanceのようです。
名前が変わっとるようです。機能も、ちょっと違うようです。
PdhAddCounterA(
hQuery, "\\Processor(_Total)\\%
Processor Time", 0, &hCounter
);
を、
PdhAddCounter(hQuery, L"\\Process(_Total)\\% User
Time", 0,
&hCounter);
に、
変えたら、動くようになりましたが、ちょっと、以前と比べて数値が低く表示されます。
この辺りは、もうちょっと、調べなければ.....
H.20.6.13