2010/07/02

WSAAsyncGetHostByName はウィンドウを必要とするから使いづらい

 
最新のネタではありませんが、昔から気になっていた API の仕様について
ちょこちょこ書いてみる。
 
 
WSAAsyncGetHostByName は gethotbyname() の非同期版なのですが、
 
ウィンドウプロシージャーを使っての通知処理
 
なので非常に使いづらい。
 
ウィンドウが存在しないと使えない関数なので、コマンドプロンプトのプログラム
では、基本使うことが出来ない。
 
  
通知イベントを、関数で受け取れるようにすれば良いのに。
 
クロスプラットフォーム用の自作ライブラリを作ってると、ウィンドウハンドル
必須というメソッドは非常に困るところですね。
 
 
たまーに「同期メソッドはスレッドで実装すれば良い」という言葉だけを言う人も
いますが、その人は全てを理解した上で発言しているのか気になります。
 
同期メソッドをスレッドで呼び出そうが、プロセスを終了するときにはスレッドを
待た無いといけない(正常終了)ので、根本的に解決していない。
 
Windows NT でアプリケーションの安定性が上がり、ブルースクリーンもほとんど
無くなったとはいえ、これは必要な実装です。
 
例えば、
タイムアウトが発生するまでプロセスを終了出来ない事を回避する為に、
 
TerminateThread() をバシバシ使う事はありえないし、それをを当たり前とするの
は危険極まりない。
  
Linux/gcc ではプロセス空間を殺せば、"基本" リークは無いというのが通例ですが。
 
 
利便性を求めると、結局プロトコルから全部自作になってしまうんだよなぁ。
 
さすがに全て対して 車輪の再発明 を行うのは骨が折れますし…何より厳しい。

0 件のコメント:

コメントを投稿