ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月25日(土) 08:51

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 
作成者 メッセージ
 記事の件名: CreateThreadについて
投稿記事Posted: 2006年9月27日(水) 01:06 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
住所: 高知
先ほどSourceForgeにて、
CreateThread関数を
コード:
Declare Function CreateThread Lib "kernel32" Alias "CreateThread" (
	ByRef lpThreadAttributes As SECURITY_ATTRIBUTES,
	dwStackSize As DWord,
	lpStartAddress As LPTHREAD_START_ROUTINE,
	lpParameter As VoidPtr,
	dwCreationFlags As DWord,
	lpThreadId As DWordPtr
	) As HANDLE
から
コード:
Declare Function CreateThread Lib "kernel32" Alias "CreateThread" (
	lpThreadAttributes As *SECURITY_ATTRIBUTES,
	dwStackSize As DWord,
	lpStartAddress As LPTHREAD_START_ROUTINE,
	lpParameter As VoidPtr,
	dwCreationFlags As DWord,
	ByRef lpThreadId As DWord
	) As HANDLE
に変更してきました。

これまでのプログラムとは互換性が無くなり、多少問題が発生するかもしれませんが、
そもそもlpThreadAttributesにはNULL以外渡すことが無いのと、
lpThreadIdはNULLで省略することができないという点から見て
これまでよりスレッドの作成が簡単になると判断しました。

何かご意見あれば返信ください。

※この変更は次回のABのバージョンアップで有効になりますので現時点で修正は可能です。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 10:27 
それはつまりver5以降のActiveBasicはver4以前のコードとの上位互換性を破棄するという開発者サイドの暗黙的な意思表明とうけとめてよろしいか。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 12:26 
>それはつまりver5以降のActiveBasicはver4以前のコードとの上位互換性を破棄するという開発者サイドの暗黙的な意思表明とうけとめてよろしいか。
引用:
これまでのプログラムとは互換性が無くなり、多少問題が発生するかもしれませんが、
そもそもlpThreadAttributesにはNULL以外渡すことが無いのと、
lpThreadIdはNULLで省略することができないという点から見て
これまでよりスレッドの作成が簡単になると判断しました。
と、互換性と変更理由について書かれています。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 14:01 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
住所: 高知
引用:
それはつまりver5以降のActiveBasicはver4以前のコードとの上位互換性を破棄するという開発者サイドの暗黙的な意思表明とうけとめてよろしいか。
少し補足します。

互換性の面で「多少問題」があるというのは
スレッドの機能を一体どれだけの人が使用しているのかという点と、
沢山いるなら変更できませんが、一般的なプログラミングでスレッドを
多用することはありませんし、そもそも使用しないだろうという点につきます。

スレッドを使ったことがある方なら気付いていると思いますが、
lpThreadAttributesパラメータは現在のABの定義では
ByRef指定になっています。
これではByVal NULLという回りくどい指定が必要となります。
また、lpThreadId パラメータはNULLを渡して
値を省略してはいけない仕様になっているため
態々スレッドを作成するためにVarPtr(idThread)のように
アドレスを渡す必要がなくなります。
コード:
Dim Id As DWord
CreateThread(ByVal NULL, 0, AddressOf(Thread), NULL, 0, VarPtr(Id))
コード:
Dim Id As DWord
CreateThread(NULL, 0, AddressOf(Thread), NULL, 0, Id)
ゲストさんの仰るように「互換性」も大事ですが、
私は上と下を比べた時、下の方が効率的なコーディングができると思いますし、
初心者にも分かり易いと思うのですが如何でしょう?


通報する
ページトップ
 記事の件名: Byval NULL について
投稿記事Posted: 2006年9月27日(水) 18:22 
オフライン

登録日時: 2006年3月01日(水) 13:54
記事: 10
Byrefには、そもそも定数は渡せないので、ByrefにNULLが渡されたら、自動的にByval NULLと認識させることはできないのでしょうか。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 19:13 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
山本さんがコンパイラのソースコードにちょっと手を加えれば可能になるとは思いますが、コードの記述ミスが多くなるような気がします。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 22:41 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 895
住所: 東京都
同様の変更はほかにもCoCreateInstanceなどで行っています。
これによって起こる非互換は,Declareで宣言した関数も通常の関数同様多重定義できるようになれば解決できるのに……,と私は思っています。
つまりByVal版とByRef版で多重定義するわけです。
ByRef引数にNULLを渡せるようにすることとあまり変わりはしませんが,それより汎用的な機能だと思います。

この方式ではCreateFileなど多用されている関数でもByRef/ByValの変更を適用することができるという利点があります。
私は,Declareの関数が多重定義できないのはバグと思っています。(バグ報告へは書いていませんが)

もっともそれが実現したとしても,今のABではオーバーロードの解決が曖昧ですというエラーの嵐になりそうな気がしなくもありませんが。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke