新しいPCで、Jyaiko1.1を試す



新しい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

  for(i=0;i<2048;i++)
  {
   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]  =data->result[2*i];
   data->arranged_fft[4096+2*i+1]=data->result[2*i+1];

  }

    みたいに、してたのですが、local変数にして、thread内から、出来る限り、global変数を呼び出さないようにしました。

  //arrange FFT

  for(int i=0;i<2048;i++)
  {
   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]  =data->result[2*i];
   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