トップページtech
981コメント348KB

【GUI】wxWidgets(旧wxWindows) その3【サイザー】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/09/09(土) 00:06:30
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)について語りましょう。

本家
 http://www.wxwidgets.org/
wxWindows日本語プロジェクト
 http://wxwindowsjp.sourceforge.jp/
Let's wxWidgets
http://dot-gray.s33.xrea.com/
(*)準備中(*)
http://www.geocities.co.jp/SiliconValley-Cupertino/8526/
wxWindowsで始めるC++ GUIプログラミング
http://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
http://namazu.org/~satoru/pub/uu-2004-08/
dW : Linux : wxWindowsの概要
 http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-wxwin.html
SunWorld Online:wxWindows――無名だが成熟したGUIツールキット
 http://www.idg.co.jp/sw/back/200102/20010219_01_report.html
0002デフォルトの名無しさん2006/09/09(土) 00:07:04
過去スレ
http://pc8.2ch.net/test/read.cgi/tech/1097524712/
http://pc5.2ch.net/test/read.cgi/tech/1052186697/

主な言語バインディング

wxPython
 http://www.wxpython.org/
wxPerl
 http://wxperl.sourceforge.net/
wxRuby
 http://wxruby.rubyforge.org/wiki/wiki.pl
wx4j
 http://www.wx4j.org/
wx.NET
 http://wxnet.sourceforge.net/
wxLua
 http://www.luascript.thersgb.net/
wxHaskell
 http://wxhaskell.sourceforge.net/
0003デフォルトの名無しさん2006/09/09(土) 00:17:35
車輪の再発明をしても仕方がありませんし、公開に値するしろものでもありませんので
将来的にもソースは出せないと思います。
ゆくゆくは自作のプログラムに組み込めればそれでいいかな、と。
0004デフォルトの名無しさん2006/09/09(土) 00:18:35
ところで
http://www.codeproject.com/useritems/wxwidgets.asp
このページはいろいろ参考になると思うんですが、テンプレに入れませんか?
0005デフォルトの名無しさん2006/09/09(土) 00:21:50
書籍のPDF
ttp://www.phptr.com/promotions/promotion.asp?promo=1484&redir=1&rl=1
http://www.phptr.com/content/images/0131473816/downloads/0131473816_book.pdf
0006デフォルトの名無しさん2006/09/09(土) 00:35:47
>>1
一応JavaScriptバインディングもあるよ。
wxJS
 http://users.skynet.be/saw/wxJS/
0007デフォルトの名無しさん2006/09/09(土) 08:36:39
>>1 乙

>>4は移動になっているらしい。
http://www.codeproject.com/library/wxwidgets.asp
0008デフォルトの名無しさん2006/10/03(火) 21:40:46
wxCodeも入れない?
wxTreeListCtrlはWin32 Common Controlにも欲しいと思う。
http://wxcode.sourceforge.net/
0009デフォルトの名無しさん2006/10/03(火) 22:19:18
前スレの>>978, 985

wxSocket使おうとしているので、一応確認したが、
受信スレッドを内部で別に立てているなら、
wxUSE_THREADSを1と定義してビルドする必要があるのだろう。

wxMSWだけでの検証ですまんが、コードを追ってみると、

メインスレッドのみ、wxYieldを呼び出している。
wxYieldは内部でwxTheApp->Yield()を呼んでいるだけで
ここがマルチスレッドセーフではない模様。

他のスレッドはwxThread::Yield()を呼んでいる。
wxThread::Yield()の内部はSleep(0)なので、問題なし。

wxUSE_THREADSが無い時点でスレッドを立てるような
物は使ってはいけないのでイベントハンドラを定義せずに
ブロッキングで組む必要があるということじゃないのかな?
ところで、スレッド無しはわざわざヘッダを書き直さないと
そのようにはならないと思うのだが、実行してデバッグしたわけではないので
間違っていたらすまん。
そのうち自分でもテストはしないとだめなんだろうがねぇ。
0010デフォルトの名無しさん2006/10/03(火) 23:05:04
>>9
wxUSE_THREADSは1(初期値)のまんまですね
wxWidgets自体のバグの線が高そう
環境はmswです
0011デフォルトの名無しさん2006/10/03(火) 23:48:15
メインスレッドは::wxSafeYield()使え、と言ってみる
0012デフォルトの名無しさん2006/10/04(水) 02:09:24
言ってみるって言われても、wxSocketServer::Read内部にYield()が明記されているわけでw
勝手に書き換えるのは気持ち悪いでしょう
001392006/10/04(水) 02:15:41
>>11
ソースを追ってみたが、wxSafeYieldは指定したウィンドウ以下を除いて
Disable状態にした後、wxYieldを呼んでいるだけだ。
2.6.3なんだが、wxYieldからwxTheApp->Yield()内では
MT-FIXMEなどとかいた、幼稚なバグが残っているから無理。
それと、Log関数もMT Safeでないのでむりなうえ、
wxMutexGuiLeaveOrEnterはMainThread以外からの呼び出しではAssertがおきるぞ。

>>10
とりあえず、Readの先のYield呼び出しのかしょをデバッガで追って、
wxThread::Yieldにちゃんといっているかどうか確認するほうが早いよ。

Yieldを呼んでいるのは大体、wxSocket*::Wait*で、GSocketの内部でも呼んでいるのかもしれない。
GSocket::ReadもStream(TCP)なら::recvを呼んでいるだけなので、問題はなさそうだが。
GSocket::Writeもにたようなものだった。

あときになるのは、イベントも全てメインスレッドから呼ばれるから、
OnSocketEventでReadするのはMainThreadじゃない?
それだと、Multi Threadになってても、
イベント処理に行くからスタックオーバーフローしてしまいそうだが。

イベントで拾ってくるならイベントが着たら受信用スレッドにconditionなりで
知らせて、Recvさせるようにするのはどう?
■ このスレッドは過去ログ倉庫に格納されています