mfc-ml

2004年06月

30

[mfc 49191] RE: [mfc 49185] RE: プロセス名からプロセスID取得

> -----Original Message-----
> From: o...@ml.acty-net.ne.jp 
> [mailto:o...@ml.acty-net.ne.jp] On Behalf Of Fujisawa Yohei
> Sent: Wednesday, June 30, 2004 2:41 PM
> To: m...@ml.acty-net.ne.jp
> Subject: [mfc 49185] RE: プロセス名からプロセスID取得

 呉松@JCNです。

> プロセス名やプロセスIDから、そのプロセス
> のフルパスを取得したいのですが、何か良い
> 方法はないでしょうか?

> 復活はShellExecute()を使用して行おうかと思
> っており、そのためにはプロセスのフルパスが
> 必要だと考えております。
 ::GetModuleFileName();
あたりを調べてみてはどうでしょうか?
/***********************************
Shiro Kurematsu
s...@pop.bekkoame.ne.jp
http://www.sakai.zaq.ne.jp/s-kansai/
***********************************/
30

[mfc 49189] RE: プロセス名からプロセスID取得

 渋木です。

> プロセス名やプロセスIDから、そのプロセス
> のフルパスを取得したいのですが、何か良い
> 方法はないでしょうか?

 PROCESSENTRY32 構造体の szExeFile メンバには、フルパスは入ってないんでし
たっけ?

 あるいは、MODULEENTRY32 構造体の szExePath メンバとか。(同じものが入ってそ
うですが)

 それが駄目だと、NT 系限定で PSAPI を使うか、相当汚いやり方しか思いつかない
なぁ。。。

--
// 渋木宏明 (Hiroaki SHIBUKI)
// http://www.hidori.jp/
// Microsoft MVP for Visual Developer - C# since 2004
30

[mfc 49188] RE: mkdirのerrnoについて

 渋木です。

> 要は失敗すると分かっていても、やってみるかどうかという話ではないでしょ
> うか。私はどっちも間違いではないと思います。

 そうなんですけど、mkdir() 場合、「既に存在する」場合もエラーになるのが話を
ややこしくしてます。

 「mkdir() がエラーを返したらそこで処理を中止」という戦略では、既に同名の
ディレクトリが存在していた場合にも、そこで処理が中断されてしまいます。

> 仮に1回1回のmkdir()呼び出しが数100ms以上かかるなら、階層が深ければ、
> 目に見えて遅い処理となります。そうなると少しでも速くするために、mkdir()
> の呼び出し回数を減らそうとします。結果としてフォルダの存在確認は必須と
> なります。

 21世紀の今、この程度の処理時間が問題になるケースは少ないと思います。

 深く考えても100%の答えが得られるわけでもないので、当初

> 要 IE4 だかで、shlwapi にそんな API が追加されていませんでしたっけ?

> mkdir がエラーを返しても、気にせずズンドコ掘り進むのでは駄目なんですかね?
(^^;

 とコメントしたわけです。

--
// 渋木宏明 (Hiroaki SHIBUKI)
// http://www.hidori.jp/
// Microsoft MVP for Visual Developer - C# since 2004
30

[mfc 49187] Re: [mfc 49185] RE: プロセス名からプロセスID取得

とっちゃんです。

> プロセス名やプロセスIDから、そのプロセス
> のフルパスを取得したいのですが、何か良い
> 方法はないでしょうか?

CreateToolhelp32Snapshot() の引数を変えれば
同じようにモジュールの一覧をリストアップすることができます。

プロセスごとに、そのプロセスがロードしている実行モジュールの
すべてをフルパスで取得することができます。
この中から、プロセス名と同じ名前を持つモジュールを
探してくれば、一部を除いて取り出すことができます。

> 復活はShellExecute()を使用して行おうかと思
> っており、そのためにはプロセスのフルパスが
> 必要だと考えております。

ShellExecute で再度実行ができるかどうかはちょっとわかりませんが
プログラムの実行なら CreateProcess というのもあります。

> チェックがあるプロセスは、何らかの原因で終
> 了した場合に復活させたいのです。
 
こちらは任意のプロセスでしょうか?

もし対象となるものが任意のプロセス(自分のあずかり知らぬものを
含む)となると、単純に実行というだけでは復活させられない物もあります。

普通のプロセスの場合でも、起動パラメータが必須なものもありますし、
実行に特殊な条件を持つものもあります。
中には引数に何を受け取ったかによって挙動が変わるものもあります。

また、NT系OSの場合はサービスもリストアップされます。
こちらは、サービスマネージャを利用して起動しなければなりません。

それ以外にもOSの終了時(シャットダウン・ログオフ)にはプロセスの
実行が制限されるため、こちらは何をやろうと思ってもできない
ということになります。
30

[mfc 49186] Re:mkdirのerrnoについて

こなです。

なんか「いたちごっこ」というか「にわとりとたまご」というか、そんな話に
なってきているような気がするのは私だけでしょうか?
mkdir()の成功/失敗はやってみるまで分からないというのは確かにそうだと
思います。
要は失敗すると分かっていても、やってみるかどうかという話ではないでしょ
うか。私はどっちも間違いではないと思います。
実行効率/コードの見易さなど、なんらかの指標を設けた上で最適解が求まる
のだと思います。

きじまさんの元コードだと、成功/失敗に関わらず、常に全てのフォルダを作
成しようとします。
仮に1回1回のmkdir()呼び出しが数100ms以上かかるなら、階層が深ければ、
目に見えて遅い処理となります。そうなると少しでも速くするために、mkdir()
の呼び出し回数を減らそうとします。結果としてフォルダの存在確認は必須と
なります。

逆にフォルダの存在確認処理が遅い処理だとして、mkdir()呼び出しはそれより
速い処理であれば、多少mkdir()呼び出し回数が増えたとしても、存在確認処理
を省くメリットは十分にあります。

明確な指標が無いなら、後は好みの問題です。

-- 
こな <k...@yahoo.co.jp>
記事検索
Amazon.co.jp
  • ライブドアブログ