◆ マルチコアに気をつけろ (マルチコアCPUのPC上でEXEがエラーとなる) その2
どーもボキです。

少しづつ原因が絞れてきた。

Delphi製DLLにTChartが含まれる場合、
Create部 と データ描画は、同じCPU上でスレッドを実行する必要がある。

今回作成したDLLは、データのセット処理 と 描画処理は、別関数としている。
たとえば、10回データをセットしたら、1回描画する ってな感じだ。
また、グラフが非表示中は、データのセットのみが実行されるようにしている。

グラフが非表示中は、TChartの描画処理が動かないため、
スレッドを処理するCPUがどれになろうと、エラーが発生しない。
だが、グラフを表示し、描画処理が走ったとたん、エラーとなる。

Delphiのみでスレッドを組んだ場合、
コンポーネント(VCL)を直接扱う時はそのスレッド処理をSynchronize()で処理させる。
(Synchronize処理中はメインスレッドが待機する。そのため、スレッド間の処理が衝突することがない。)

今回は、スレッドをC側で作成している(_createthreadex)しているので、
スレッド間の処理が衝突しとるんだろうか?
だが、他のコンポーネント、たとえばTStringGrid等、はCPUを固定せずとも正常に動作している。
どちらにしろ、TChartがあやしい。Delphiに最初からついているTChartをつかっているため、ソースが見れない。

まぁCore i3 で処理させると、ある程度スレッドのCPUを固定しても、
20%くらいまでしか上がらんから、あまり問題にはならんけどね。
(ちなみにPen4 2.8GHzの時は、CPU負荷が60%超だった)

原因がわからんことには、気持ちよくはないがね。

[PR]
by yozda | 2010-06-09 23:17 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/10779837
トラックバックする(会員専用) [ヘルプ]
<< 年始からのプログラム開発、よう... マルチコアに気をつけろ (マル... >>