포럼: Open Discussion (Thread #17978)

NTならスレッドにする? (2008-03-12 23:27 by (del#173) #35535)

Special Launch 4 掲示板(http://splnch.sourceforge.jp/cgi-bin/forum/wforum.cgi?page=0&mode=)でも話題になっていますが、
Excelのファイルをボタンに登録しているときに、うまくファイルを開けない不具合があるみたいです。

私はXPで利用していますが、やはり同様の不具合に悩んでいました。折角のオープンソースだからと思いましたので、ソースを追いかけてみたところ、Pad.pasの3596~3600行目あたりの箇所が怪しいような気がしてきました。
-----
// NTならスレッドにする
if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
TOpenNormalButtonThread.Create(Handle, TNormalButton(Item.ButtonData))
else
OpenNormalButton(Handle, TNormalButton(Item.ButtonData));
-----
別スレッドを使ってアプリを起動しているのには何か理由があるのでしょうか?
スレッドを使わないように変更したところ(下記)、特に問題なく動いているように見えましたので。。。
-----
// NTならスレッドにする
// if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
// TOpenNormalButtonThread.Create(Handle, TNormalButton(Item.ButtonData))
// else
OpenNormalButton(Handle, TNormalButton(Item.ButtonData));
-----

と、ご覧になっているか不安になりながらポストしてみました。

RE: NTならスレッドにする? (2008-03-13 09:42 by sawasige #35536)

アプリ起動を別スレッドにした理由は、単純にレスポンスをよくするためです。

Excel ファイルを開けない問題が、アプリ起動を別スレッドにしないようにして解消されても、問題の本質を理解していないので「解決」と言って良いのか悩むところです。

実際問題として私の環境では Excel ファイルを登録しても問題なく起動できてしまうんですよね。。。
Reply to #35535

RE: NTならスレッドにする? (2008-03-13 11:39 by (del#173) #35540)

お返事ありがとうございます。

レスポンスだけなら、手元では何の問題もないので修正後のアプリを使うことにします。ありがとうございました。


Excelファイルの不具合の件は、Excelファイルを10個ぐらい登録して、順にクリックしていくと、たまに1個くらい開けない場合がある。という感じです。
開けなくなると、そのファイルはしばらく開けなくなりますが、何かの拍子に開けなくなるファイルが変わることがあります。

ただ、ブレークポイントを設定して追いかけようとすると、今まで開けなかったファイルも開けるようになることが多いので、起動スレッドが先行しすぎて何か悪いことでも起きているのかなぁ。という印象でした。

Delphiをさわったのは昨夜が初めてですので、詳しく追いかけられているか不安ですが^-^;
ひとつの情報として解決に向かうとうれしいです。

私の手元では、前回書いた修正で無事に起動しているのでひとまず解決扱いにしてしまいます^-^
Reply to #35535