10/05/29 09:09:01
>>199
usingを知りたいのはわかるw
ヘッダーよりどの関数の代わりかで聞いたほうがいいよ
201:189
10/05/29 09:29:35
>>190
こんなかんじです
private void onUpdate(){
// initialize the dialog
nameBox.Text = station.name;
label_loaded.Text = string.Format("{0} / {1}",station.LoadedToday,station.LoadedYesterday);
label_unloaded.Text = string.Format("{0} / {1}", station.UnloadedToday, station.UnloadedYesterday);
label_trains.Text = string.Format("{0} / {1}", station.TrainsToday, station.TrainsYesterday);
label_waiting.Text = string.Format("{0} / {1}",station.WaitingPassengers, station.population);
label_entering.Text = string.Format("{0} / {1}",station.WantEntering, station.entering);
label_LastUnloded.Text = station.lastUnloaded.ToString();
}
202:デフォルトの名無しさん
10/05/29 10:04:45
簡単なのはShell32.dllをCOMとして参照設定し、
using Shell32;
で、Z:\Hoge.lnkのリンク先を得るコードはこんな感じ。
ShellFolderItemを直接得る方法があればいいんだけど、それは分からん。
Shell sh = new Shell();
Folder f = sh.NameSpace(@"Z:\");
foreach (ShellFolderItem i in f.Items())
{
if (i.IsLink && i.Path == @"Z:\Hoge.lnk")
{
Console.WriteLine(((ShellLinkObject)i.GetLink).Target.Path);
}
}
203:202
10/05/29 10:08:38
すまん
>>202は>>199な。
204:デフォルトの名無しさん
10/05/29 11:28:09
>>201
それに使ってるプロパティのどれかが内部的にシリアライズ使ってるか、
どっかでシリアライズしてるのがたまたま其処で発狂するかのどっちかだな
てか何処でエラー起こってんのよ?
newしてるとこじゃないんだろ
205:197
10/05/29 12:12:10
>>202
ありがとうございます
試してみたところ
エラー 1 型または名前空間名 'Shell32' が見つかりませんでした。
とエラーがでてしまいます。
206:デフォルトの名無しさん
10/05/29 13:07:35
>>205
ちゃんと参照設定してないだろそれ
usingのことじゃないぞ>参照設定
207:デフォルトの名無しさん
10/05/30 00:51:07
.NET framework 4でoffice 2003のアドイン作れますか??
208:デフォルトの名無しさん
10/05/30 18:21:20
タイプライターのように文字表示したいのですがUIでThreadを使うなと以前書いてあったと思います
どのようにwaitをかければ良いでしょうか
URLリンク(ideone.com)
209:デフォルトの名無しさん
10/05/30 18:42:43
>>208
Dispatcher通せば別スレッドからアクセスできるよ。
210:デフォルトの名無しさん
10/05/30 19:08:07
>>208
System.Windows.Timerを使えばいい。
211:デフォルトの名無しさん
10/05/30 19:54:56
waitを掛けるって発想が大昔のBASICっぽいなw
212:デフォルトの名無しさん
10/05/30 19:56:20
UIでThreadを使うなって
Invokeしろって意味じゃないのか?
213:デフォルトの名無しさん
10/05/30 19:59:38
正しくは「UIスレッドを止めるな」だな
スレッドを止めたいときは別のスレッドを作る
214:デフォルトの名無しさん
10/05/30 21:09:56
208です
BackgroundWorkerを使って別スレッドにしてみましたが結局UIを触るなってことらしく
にっちもさっちも行きません
Thread.Sleepで止めて、その間UIを触れないようにしました
215:デフォルトの名無しさん
10/05/30 21:17:29
タイマ使え
ループはいらん
216:デフォルトの名無しさん
10/05/30 21:42:04
>>214
どこを参照してそのような知識を得たのか晒してみるといいよ
217:デフォルトの名無しさん
10/05/30 21:51:58
タイマーだと、タイプライターのような入力文字列によるインターバルの差や、
入力速度の揺らぎを再現しようとすると、綺麗に纏まらないな
勿論、それくらいやるよね>>208
218:デフォルトの名無しさん
10/05/30 21:55:56
それでもそんなことにスレッド使うのはありえない
短い間隔で頻繁にコールバックかけて時間測るようにするだろ
ゲームみたいに自分でメッセージループ回してもいい
219:デフォルトの名無しさん
10/05/30 22:03:16
>>214
だからDispatcher使えって。
別スレッドから、「UIスレッドでこの処理実行してくれ」ってお願いする機能。
220:デフォルトの名無しさん
10/05/30 22:07:38
いやそもそも普通そんなことにスレッド使わないから
221:デフォルトの名無しさん
10/05/30 22:08:55
>>219
普通DispatcherというとSystem.Windows.Threading.Dispatcherだが、
WinFormの話でそんなんだされても困る
222:デフォルトの名無しさん
10/05/30 22:13:49
208です
さすがに素人でも214の処理はまずいと思いましたのでTimerを使ってみました
URLリンク(ideone.com)
期待通りの動きといえば期待通りなのですがどうでしょうか
223:デフォルトの名無しさん
10/05/30 22:18:26
>>221
あー、Control.Invoke (Delegate) のことね。
224:デフォルトの名無しさん
10/05/30 23:19:51
>>222
なんかおかしくね?
225:デフォルトの名無しさん
10/05/31 00:17:46
なんかって何?
クリックするたびにTickのイベントハンドラが増えるとか、
TypeWriter()の引数を使っていないとか、
typewriterは1単語だからケースがおかしいとか?
226:デフォルトの名無しさん
10/05/31 00:20:47
>>225
やさしいなw
227:デフォルトの名無しさん
10/05/31 00:29:16
C#でフォルダを作るときに変数をフォルダ名にすることはできますか?
228:デフォルトの名無しさん
10/05/31 00:35:42
変数を使わずにフォルダを作る方法がわかってるんだったら
フォルダ名を文字列で直接指定する代わりに変数を与えればいいだけ
229:デフォルトの名無しさん
10/05/31 00:35:42
なぜそうしたいんですか?
230:デフォルトの名無しさん
10/05/31 00:44:24
>>228
すいません
それがうまくいかなくて…
>>229
例えば「5」と入力したらフォルダ1、フォルダ2、…、フォルダ5というようにフォルダを作りたいので
231:デフォルトの名無しさん
10/05/31 00:49:00
>>230
for (int i = 1; i <= 5; i++) {
string folder = string.Format("フォルダ{0}", i);
}
232:デフォルトの名無しさん
10/05/31 00:50:03
>>230
それは「変数をフォルダ名にする」じゃ言葉足らずもいいとこだろ。
var path = Path.Combine(basePath, string.Format("フォルダ{0}", i);
Dicretory.CreateDirectory(path);
とかでもダメ?
233:デフォルトの名無しさん
10/05/31 00:54:08
>>231
>>232
ありがとうございます
試してみます
234:デフォルトの名無しさん
10/05/31 10:28:12
ゲ製から来た人かなあ
ゲーム作るつもりなら最終的には自分でメッセージループ回すことになると思うぞ
235:デフォルトの名無しさん
10/05/31 15:06:34
C++の__DATE__みたいなコンパイル日付は
どのように取得するのでしょうか?
236:デフォルトの名無しさん
10/05/31 15:41:05
無理
どうしてもやりたかったらビルド前のコマンドでコード生成
237:デフォルトの名無しさん
10/05/31 17:43:21
無いですか・・・残念
ありがとう
238:デフォルトの名無しさん
10/05/31 23:18:02
コード生成っていったって
internal static class VersionInfo { public const string Date = "2010/05/31"; }
こういうのを生成してcsファイルに保存する処理をスクリプトかなんかで書いてビルド前イベントで呼ぶだけ
239:デフォルトの名無しさん
10/06/01 00:56:56
svnのリビジョンを読み取ってソースに書き込む奴とかな。
240:デフォルトの名無しさん
10/06/01 04:51:57
わざわざ読み取らなくても勝手に変えてくれるよ
241:デフォルトの名無しさん
10/06/01 15:22:12
MSってコード生成とかメタプログラミングとか好きだから
__DATE__みたいなオモチャ使わず各自で好きにやるのが普通だと思ってるんだろうな
242:デフォルトの名無しさん
10/06/01 16:22:49
どうしても必要ならリフレクション。
243:デフォルトの名無しさん
10/06/01 16:50:03
リフレクション使うにしてもコンパイル時に埋めこんどかないと無理
[assembly:CompileDate("2010/05/31")]みたいな
どっちみちコード生成が必要だから>>238の方が楽
244:239
10/06/01 19:34:49
>>240
うわあ、今までPerlのスクリプトで処理してた・・・
245:デフォルトの名無しさん
10/06/01 19:50:35
>>244
まじかよw
これまでの作業量について考えるのだけはやめておくんだ!これからが大事!な!
246:デフォルトの名無しさん
10/06/02 05:36:50
245 のやさしさに泣いた
247:デフォルトの名無しさん
10/06/02 08:58:57
まぁ遠回りして勉強になることもあるし・・・
あまりにも調べが足りなさすぎるがこれも勉強だw
248:デフォルトの名無しさん
10/06/02 10:55:14
まあデフォルトのままだとかわらないからな
249:デフォルトの名無しさん
10/06/02 13:09:26
相談です。
.NET3.5でWindowsフォームアプリケーションを作成しています。
Webカメラやリモートカメラなどの映像を取り込み、その映像をリアルタイムにフォーム内に表示したいのですが、
可能でしょうか?
「webカメラ キャプチャ」等のワードで検索しても良い資料が見つからなかったので、
どなたか良い方法をご教授ください…
250:デフォルトの名無しさん
10/06/02 13:34:04
>>249
DirectShow辺りに答えがあるんじゃないかな?
あと、ヒントならGraphEditPlusというツールを使うのもありかも。
251:デフォルトの名無しさん
10/06/02 13:51:48
Directshow.NET使ってる。
普通に使える
252:251
10/06/02 14:00:17
あーあとOpenCVの.NET版も試したけど使えたよ
253:デフォルトの名無しさん
10/06/02 14:38:34
どなたか教えてください。
機器との通信により得られた16進数の浮動小数点データ形式文字列を、
10進数にしてを表示するプログラムを作成したいのですが、よい方法はないでしょうか?
<例>受信データ:42C80000 出力:100.0
といったものを作りたいのです。
なお、受信データを文字列に変換するところまでは、できています。
254:デフォルトの名無しさん
10/06/02 14:49:05
16進文字列をintに変換
int n = Convert.ToInt32("42C80000", 16);
intを浮動小数点に変換
float f = BitConverter.ToSingle(BitConverter.GetBytes(n), 0);
100.0のような書式で出力するのはわかるよね?
255:デフォルトの名無しさん
10/06/02 15:00:18
その前にエンディアンとかの話は大丈夫なんだろうか・・・
256:デフォルトの名無しさん
10/06/02 15:01:56
受信データの例を見る限り問題無いでしょ
257:253
10/06/02 15:29:16
>254さん
できました。
ようやくConvert.ToInt32の意味がわかりました。
どうもありがとうございます。
258:デフォルトの名無しさん
10/06/02 20:34:47
フォーム内のフォーカスを初期表示時と同じにする、もしくは
フォーム内のコントロールで TabIndex が一番若い番号のコントロールを
簡単に知る方法はないでしょうか?
現在複数のフォームを使うアプリを書いているのですが、
インスタンス化の処理が結構重い(DBから情報ひっぱってきてコントロールを沢山つくる)ので
フォームのインスタンスを使いまわすことにしました。
Close() のかわりに Hide() を使ったまではいいのですが、
再度表示したときに当然のごとくフォーカスの位置が前回と同じなままになってしまいます。
ロードイベントあたりで先頭のコントロールに対して Select() を使って対処していますが、
コントロール名をハードコーディングしているのでデザイナでの TabIndex 変更に追従出来ていません。
259:デフォルトの名無しさん
10/06/02 20:45:33
>コントロール名をハードコーディングしているのでデザイナでの TabIndex 変更に追従出来ていません。
意味がわかりません
260:デフォルトの名無しさん
10/06/02 20:56:45
とてつもないドキュソ実装の香り。
動的なフォーム構築で追加したコントロールのTabIndex再設定ができません、と聞こえる。
手を抜かないでFormのControlsを回して設定し直せばいいんじゃね?
261:258
10/06/02 21:04:19
>>259
TabIndex が一番若いコントロールを決めうちして
Load イベントで直接 Select() しちゃっています。
デザイナで順番かえたりした場合は一々 Select() を呼び出すコントローラーを変更しています。
>>260
全部を動的に追加しているわけじゃなく、いくつか固定で置いてあるものもあるんですが、
動的フォーム構築をする場合って全部の TabIndex をコードビハインド側でふりなおすのが普通なんでしょうか?
その場合ってデザイナ側での並び順がかわったら一々コードも修正しないといけないですよね?
262:デフォルトの名無しさん
10/06/02 21:08:09
>>250,251
ありがとうございます
263:デフォルトの名無しさん
10/06/02 21:08:45
LinQで検索でいけるじゃんと思ったけどPanelとか使ってると結構めんどくさいな
264:デフォルトの名無しさん
10/06/02 21:13:57
USBカメラを使って、動画を
AVIファイル形式での作成の仕方はサンプルみつけたんだけど、
WMVもしくはMP4で作成できる人いる?
AVI形式はサイズが大きすぎて、、、小さくしたいんだよね。
265:デフォルトの名無しさん
10/06/02 21:20:46
スレ違い
そういうのはC#にこだわらずにC++のコードとか漁らないと
266:258
10/06/02 21:22:48
自己解決しました。
フォームの VisibleChanged イベントハンドラで自分自身に対して SelectNextControl() を使うことで
希望の動作となりました。
267:デフォルトの名無しさん
10/06/02 21:33:45
フォームインスタンス使いまわしはクリアの処理が汚なくなりがちだからきらいだな
268:デフォルトの名無しさん
10/06/02 21:36:45
きちんと戦略を練られるならいいけど、タブ順の管理すらメンドクサなんていう
子のコードは信じられない。
269:デフォルトの名無しさん
10/06/02 21:50:28
>>268
タブ順はデザイナーで管理したい、って話じゃないの?
俺はそういうのはデザイナ側で完結してないと気持ちわるいけどな。
WPF万歳だよほんと。
270:デフォルトの名無しさん
10/06/02 21:53:20
コードビハインドはどっちかっつーとまだデザインの範疇じゃね?
まータブ順変更しただけでコード書き換えなきゃいけないような実装はタコだと思うけど。
271:デフォルトの名無しさん
10/06/02 22:00:38
WPFありがたがってるのは総じてアホ
272:デフォルトの名無しさん
10/06/02 22:13:29
新しいものを受け付けなくなったら終わりだよ
C#ユーザーってもっとミーハーが多いのかと思ってた
273:デフォルトの名無しさん
10/06/02 22:16:09
WPF単体だと見切る可能性大だったな
SilverLightがなければやろうと思わなかった
274:デフォルトの名無しさん
10/06/02 22:19:16
>SilverLight
ほんとにやってんの?
275:デフォルトの名無しさん
10/06/02 22:21:09
xamlという共通な部分があるからね
実装差違とかあるのもわかってるよ
どっちかといえばsilverlightのついでにWPFやる感じ
276:デフォルトの名無しさん
10/06/02 22:21:36
test
277:デフォルトの名無しさん
10/06/02 22:24:34
xamlがわからない
278:デフォルトの名無しさん
10/06/02 22:26:38
xamlやるぐらいならHTML5とJavaScriptやる
279:デフォルトの名無しさん
10/06/02 22:31:28
たかが設定ファイルに何そんなに騒いでるの
XAMLなんかDesigner.csをXMLにしただけのもの
触りたくなけりゃ触らなくてもデザイナ任せでWinForms程度のUIは作れる
280:デフォルトの名無しさん
10/06/02 22:32:19
なんでか、うちのWindows7じゃWPF動かんし。
動かすと「URLが正しくないため、読み込めませんでした」。
エクスプローラからダブルクリックしても全く動かない。
281:デフォルトの名無しさん
10/06/02 22:34:02
>>277
winformでも同じような仕組み作れるよ
Formにwebbrowser貼り付けてそこへ起動時にhtmlコード入れて
webbrowserのどれがクリックされたとかイベント処理すればOK
282:デフォルトの名無しさん
10/06/02 22:34:12
何を勘違いしてるのか知らんがプログラミングやるようなレベルじゃないな
283:280
10/06/02 22:42:26
あ、すまん勘違い。なんかいじってた設定が悪かった。新規作成したら動いたわ。
284:デフォルトの名無しさん
10/06/03 01:14:15
ソフトウェアキーボードを作っています。
タブによって英数字と平仮名のキー分けてをそれぞれ実装しています
ある文字ボタン(ここでは「か」と書かれたボタン)を押すとイベントが発生し、以下のような処理を行います。
private void buttonH_SA_Click(object sender, EventArgs e) {
SendKeys.SendWait("ka"); //"平仮名の「か」を送りたい
}
このようにして、ソフト上でキーボードを実現したいのですが、
例えばメモ帳アプリケーションに対してこのような処理を実行すると、"か"ではなく"ka"としか表示されません。
なんとかして、メモ帳に"ka"ではなく"か"と表示させることはできないのでしょうか?
対象テキストボックスのImeModeプロパティが弄れたらいいのだけれどもそれは無理ですし…
何か良い方法があればご教授下さい。
よろしくお願いします。
285:デフォルトの名無しさん
10/06/03 07:01:55
SendKeys.Send("か");
でいかんのか?
286:デフォルトの名無しさん
10/06/03 10:42:43
>>285
それは試しましたが、確かに「か」と出力されます。
しかし未変換の状態で出力されてほしいのです。(文字に下線がついて出力されるように)
その方法では既に確定した状態で出力されてしまいます。
287:デフォルトの名無しさん
10/06/03 11:06:27
DLLのAPI呼び出しでもいい?
288:デフォルトの名無しさん
10/06/03 11:55:11
>>287
大丈夫です
289:デフォルトの名無しさん
10/06/03 14:22:47
>>288
ならWin32 APIのSendInputを呼び出すんだな。
IMEがMS IMEなら下線付きで送信される。でも残念ながらATOKは確定済みで送信される
290:デフォルトの名無しさん
10/06/03 14:27:22
Imm~で何とかできそうな
291:デフォルトの名無しさん
10/06/03 15:43:17
URLリンク(cs2ch.blogspot.com)
これにIMEの制御つけるだけじゃないの?
292:デフォルトの名無しさん
10/06/03 16:14:03
多分「詳細なテキストサービス」の出番ではなかろうか
Imm系がそれだったような気もするが詳しくは知らん
てか情報なさ過ぎ
293:デフォルトの名無しさん
10/06/03 16:17:15
>>292
それより問題なのがOSがvista以降くらいになると
IME関連の制御が違うとかどうのって記述を見かけたたんだよな・・・
294:デフォルトの名無しさん
10/06/03 17:53:48
>>293
これだな URLリンク(social.technet.microsoft.com)
VistaからTextServicesFramework、略してTSFなるものに変わったらしい
まったく毎度毎度要らんことしてくれるわM$さんはよう
295:デフォルトの名無しさん
10/06/03 18:06:11
>>294
それそれ
MS関連でタッチパネル系デバイスが普及しないのは
そういうところなんだよね~
296:デフォルトの名無しさん
10/06/03 18:39:37
>>295
かんけーねーし、
そもそも携帯電話以外で巷にあふれているタッチパネルのデバイスの大半はMSのOS使っているだろ。
297:デフォルトの名無しさん
10/06/03 18:42:34
業務用で終わってる内は普及したとはいわねーよw
298:デフォルトの名無しさん
10/06/03 18:49:58
>>297
ニートは言うことが面白い。
299:デフォルトの名無しさん
10/06/03 19:07:43
>>296
WindowsMobileを無視するとは。
300:デフォルトの名無しさん
10/06/03 19:16:50
>>298
自分の家が世界の全てだからな。
301:デフォルトの名無しさん
10/06/03 19:18:38
普及したって定義は実際はどうなの?
302:デフォルトの名無しさん
10/06/03 19:47:37
なんか一気に雰囲気悪くなったな
303:デフォルトの名無しさん
10/06/03 19:51:54
まあネタに真面目に突っ込むのもアレだけど、
>>294も>>295もどっちもどっちではある。
Windowsでサポートされてたタッチパネルってほとんどマウスエミュレーション系じゃない?
ああいうのを今日的な感覚でタッチパネルって言っていいのかどうか。
304:デフォルトの名無しさん
10/06/03 21:56:45
いきなりネガキャンされたらいい気しない人も結構いるってことじゃないの?
305:280
10/06/03 22:06:50
かといって、タップ&ホールドを持ち込まれるとついていけない子がいっぱい。
でもないのか、iPhoneとかでも使われてるし。
306:294
10/06/03 23:33:13
>>303
ちょwww俺もかよwwwwww
アンカーミスだよな?
307:デフォルトの名無しさん
10/06/04 01:11:12
MSILのリファレンスってどこで見れますか?
308:デフォルトの名無しさん
10/06/04 01:12:45
XmlSerializerでデシリアライズをやろうとしてるんですが、
一つの要素に配列の様に複数の値が入ってる場合にちょっと困ってます。
↓こんな要素があって、colorをRGBAで読み込みたいんです。
<ambient>
<color>0.50000 0.50000 0.50000 1</color>
</ambient>
とりあえず文字列としてはcolorがデシリアライズできましたが、
public class ambient
{
public string color;
}
使い勝手が悪いのでfloat4つのR,G,B,Aを持ったcolorクラスとして、
もしくはfloat[4]として読み込みたいです。
public class color
{
public float r, g, b, a;
// public float[] rgba;
}
何かいい方法ないでしょうか?
309:デフォルトの名無しさん
10/06/04 01:17:48
<ambient>
<color a="0" r="0" g="0" b="0"/>
</ambient>
とか
<ambient>
<color>
<a>0</a>
<r>0</r>
<g>0</g>
<b>0</b>
</color>
</ambient>
とか
310:デフォルトの名無しさん
10/06/04 01:19:19
xmlの方は変えられないのならsplitでバラすとか
311:デフォルトの名無しさん
10/06/04 01:35:51
xmlの方は変更出来ません。
文字列で読み込んでから分割するしかないですかね。
312:デフォルトの名無しさん
10/06/04 01:38:15
無いんじゃないかな
313:デフォルトの名無しさん
10/06/04 01:40:04
XmlSerializerの都合もあるだろうしね・・・
というか何でできないの?
最悪の場合は変換前のxmlに正規表現の置換でもかけて
XmlSerializer向けに直してやるとかは?
314:デフォルトの名無しさん
10/06/04 02:04:40
google earth用のモデルファイルなんで、モデルファイル自体には変更無しで読み込もうとしてました。
315:デフォルトの名無しさん
10/06/04 02:08:25
普通にxmlをreadさせて解析するのじゃだめなのかね?
316:デフォルトの名無しさん
10/06/04 10:44:26
Google はその辺りすごい evil だからなぁ。
他社との連携とかほんと無視。
317:デフォルトの名無しさん
10/06/04 10:56:28
単純にsoapの方を使ってシリアライズしたらいいじゃん
フィルタ書けてそう言うのも簡単に読み書きできるし
318:デフォルトの名無しさん
10/06/04 12:17:33
>>307
最も完全なのはecmaのCLI
オペコードのリファレンスとしてわかりやすいのはMSDNのSystem.Reflection.Emit.OpCodes
319:デフォルトの名無しさん
10/06/04 14:51:38
>>316
それを悪とするあつかましさが醜い
320:デフォルトの名無しさん
10/06/04 20:48:13
XmlSerializer 便利だけど結構こまかい制約あるしなあ
321:デフォルトの名無しさん
10/06/04 21:58:47
邪悪なxxコンテストとか今時のヤツはやらんのか・・・
322:デフォルトの名無しさん
10/06/04 22:38:21
Soapってまだ使われてる??
323:デフォルトの名無しさん
10/06/04 22:41:16
全国どこにでもありますが
324:デフォルトの名無しさん
10/06/04 23:13:47
駅前のは本番ないから気をつけような
325:デフォルトの名無しさん
10/06/04 23:26:36
知らんかった(岐阜県民)
326:デフォルトの名無しさん
10/06/04 23:49:38
質問です。
VC2008 C#の、イミディエイトウィンドウ内で
IEnumerable実装クラスなどを列挙させるのに
いい方法はないでしょうか。
327:デフォルトの名無しさん
10/06/05 00:02:08
.ToArray()
328:デフォルトの名無しさん
10/06/05 00:19:07
その後、[0], [1] とか自力でやりますか?
329:デフォルトの名無しさん
10/06/05 00:29:27
イミディエイトウィンドウって使う?
全部ウォッチウィンドウで済ませちゃってるんだけど。
330:デフォルトの名無しさん
10/06/05 00:33:08
たまに使う。
副作用のあるメソッド呼び出しとか。
331:デフォルトの名無しさん
10/06/05 00:35:07
>>328
試せよ
配列なら自動的に中身が表示される
332:デフォルトの名無しさん
10/06/05 03:09:17
なるほど
333:デフォルトの名無しさん
10/06/05 07:37:53
>>329結構使う
ブレイクさせて関数への引数変えて返り血みてみたいとか
変数の値直で変えたり、デバッグ用のテストコードにすりゃいいんだろうけど、その場限りの時はつかうかなぁ
334:デフォルトの名無しさん
10/06/05 07:40:06
痛そう
335:デフォルトの名無しさん
10/06/05 07:59:58
イミディエイトウィンドウでの実行の仕方がなかなかわからなくて
結構こまってた。
インテリセンスするためだけのウィンドウだと思ってたよ・・・
336:デフォルトの名無しさん
10/06/05 10:12:47
>>329
あそこでバグ修正用コードとか
半分コーディングしにかかるレベル
337:デフォルトの名無しさん
10/06/05 10:51:59
>>333
そのあたりはクイックウォッチからもできるから。
イミディエイトウィンドウじゃないとできないことって何だろう?
338:デフォルトの名無しさん
10/06/05 12:23:40
object o = null;
(クイック)ウォッチでやるとこんなメッセージがでる
> 宣言ステートメントは、イミディエイト ウィンドウでのみ許可されています
339:デフォルトの名無しさん
10/06/05 14:13:04
当たり前だっ
340:デフォルトの名無しさん
10/06/05 14:42:48
なにおいっているのら・・・・
341:デフォルトの名無しさん
10/06/05 15:56:08
プロパティでクラスを返す時読み取り専用に
する方法はありますか?
class a : ICloneable {
int value = 0;
//以下略
}
class b {
private a = new _a();
public a REF {
get{ return _a; }
set{ _a = value; }
}
public a CLONE {
get{ return _a.Clone(); }
set{ _a = value; }
}
}
b = new obj();
b.REF = new a(); //更新をこれだけにしたい(CLONEも)
b.REF.value = 5 //禁止したい
b.CLONE.value = 5 //意図しない動作なので禁止したい
342:デフォルトの名無しさん
10/06/05 16:05:00
ない
中身を変更できないようにクラスを作る
あとICloneableを重視してらっしゃるようだけど今は非推奨になってるから実装しなくていいよ
343:デフォルトの名無しさん
10/06/05 16:06:44
aクラスに読み取り専用のValueプロパティを作る
344:デフォルトの名無しさん
10/06/05 16:18:37
aを変更不可にしてしまえばいいんだが一般にはそれよりも
bにpublic int AValue { get { return a.value; } }を付けた方がいい
もちろん場合によるけどbを利用する側がaを知らなくて済む
345:デフォルトの名無しさん
10/06/05 16:21:36
>>342, 343
ありがとう
簡単にはいかなそうですね・・。
場所によっては変更が必要なのでprivate protectedを
駆使して試して見ます
てか、ICloneableが非推奨というのは驚きました。
346:デフォルトの名無しさん
10/06/05 16:24:41
URLリンク(blogs.msdn.com)
これだな
Cloneとだけ書かれてもどんなコピーが返ってくるのか全くわからん。
むしろわけのわからないネーミングを助長するだけ。DeepCopyとか自分で実装してくれ。ということらしい。
347:デフォルトの名無しさん
10/06/05 20:03:23
LabelのAutosizeをtrueにした時の伸びしろを最小限に抑えることってできないのかな?
labelを密に横並びに配置しているのだけれど、どうも隣と被さって文字が見えなくなってしまう。
Autosizeをfalseにして文字を限界まで詰めると隣のラベルとかぶることはなくなるけどなぜか文字が途中までしか表示されなくなるし。
348:デフォルトの名無しさん
10/06/05 20:14:31
>>347
悪いけど全体的に何をいいたいのかよくわからん。
てか「なぜか」ってそれのどこが疑問なのか意味わからんし。
349:デフォルトの名無しさん
10/06/05 20:46:00
久しぶりに逆襲のシャアみてたのでニュータイプになったつもりで
回答してみるとだな・・・
>>347
適当なコンテナで制御するのが一番かもね
350:デフォルトの名無しさん
10/06/05 23:12:58
C井の質問もここでよろしいのでしょうか。
351:デフォルトの名無しさん
10/06/05 23:17:38
なにそのイニシャルトーク
352:デフォルトの名無しさん
10/06/05 23:21:37
逆シャアって最後のところでアムロとシャアって
死んだとされてるけどMSが弾き飛ばされてる
はずなのに軌道がそれるのが確定したときに
二つ何かが飛び去るシーンがあるんだよね・・・
スレチ
353:デフォルトの名無しさん
10/06/05 23:42:28
二人が自由になるための作戦
死んだ事にして別人を名乗って気楽に生きていくために
354:デフォルトの名無しさん
10/06/06 00:28:16
嬉し恥ずかしボーイズラブですね
355:デフォルトの名無しさん
10/06/06 02:23:22
>>347
たぶんそこら辺面倒なくしたければテーブルを使うのが気楽でよいよ
356:デフォルトの名無しさん
10/06/06 04:01:34
Datagridviewの使い方が解りません。だからラベルをチマチマ貼ってます。
マウスで綺麗に配置した積りだけど、どうも隣と被さってる気がします。
とエスパーしてみる。
357:デフォルトの名無しさん
10/06/06 07:02:30
ほぼ正解
358:デフォルトの名無しさん
10/06/06 09:15:18
>>347
TableLayoutPanelコントロールを使えばOK
359:デフォルトの名無しさん
10/06/06 12:33:22
入力チェックについて相談させてください。
フォーム内に登録されているコントール全ての Validating イベントを発生させるには
どうしたらよいのでしょうか?
現在、それぞれの項目の入力チェックは Validating イベントの中で処理し、
内容が正しくない場合は ErrorProvider を使用してアイコンを表示するようにしています。
このままですと一度もフォーカスを得ないままのコントロールは入力チェックがなされないままになってしまいます。
なので、登録ボタンを押下したタイミングでも全ての項目の入力チェックを行なおうと考えたのですが
うまい方法が思いつきませんでした。
ContainerControl の Validate メソッドで子コントロール全てを Validate できるのかと思ってためしたのですが
だめでした・・・
360:デフォルトの名無しさん
10/06/06 14:06:01
つValidateGroup
361:デフォルトの名無しさん
10/06/06 14:37:35
>>360
ValidatingGroup ですね。
ASP.NET 用ですか・・・ Windows Form では使えなさそうですね。
362:デフォルトの名無しさん
10/06/06 14:46:57
ContainerControl.ValidateChildrenは?
363:デフォルトの名無しさん
10/06/06 15:20:58
>>362
おおお! まさしくそれです
ありがとうございます
実装してみたところ期待通りの動作となりました
しかし・・・
なぜか自分ところの環境(VSEE2008)だと
ValidateChildren がインテリセンスにもオブジェクトブラウザにも出てこない・・・
ターゲットは .NET 2.0 にしてるしビルド自体は通るから問題なさそうなんだけどなんでなんだろう
364:デフォルトの名無しさん
10/06/06 15:24:10
Browsable(false)属性付きだから
なんでそうしてるかは.NETの中の人に聞かないといけないが
365:デフォルトの名無しさん
10/06/06 15:34:56
なるほど。
Form の方では Browsable(true) になっていました。
メソッドの性質を考えるとなるべく上位で使って欲しいからとかそんなとこなんでしょうかね。
重ね重ねありがとうございます。
366:デフォルトの名無しさん
10/06/06 16:38:40
やるな
367:デフォルトの名無しさん
10/06/06 17:01:44
ADO.NETで質問なんですが、
DataRow一行だけを編集するような画面を作る場合でも
TextBoxとかComboBoxにバインドするのが一般的な作り方なんでしょうか?
それとも一々内容を移しかえるやり方が一般的なんでしょうか?
368:デフォルトの名無しさん
10/06/06 17:15:30
たった1行でも入力項目が多ければバインドする~
369:デフォルトの名無しさん
10/06/06 19:02:49
ADOは見通しが悪いよね
370:デフォルトの名無しさん
10/06/06 19:07:50
手書きのADO.NETはそう悪くないんだけど
ウィザード生成の型付きデータセットが意外と解り辛くて不評。
371:デフォルトの名無しさん
10/06/06 22:06:03
WebRequestでのFTPPUTはたまにリモートサーバーに接続できないエラーになるけど、
やはり、ソケットで作らないとだめなのかしら?
372:デフォルトの名無しさん
10/06/06 22:11:05
んなことはない。
373:デフォルトの名無しさん
10/06/06 22:18:06
IEのHTTP/GETだってたまにリモートサーバーに接続できないエラーになるぜ
374:デフォルトの名無しさん
10/06/07 04:51:02
いやそれはルータが腐ってるw
375:デフォルトの名無しさん
10/06/07 09:11:05
ルーターも然り、相手の環境のせいも然りってことでしょ。
いろんな環境原因も含めてHTTPやFTP、その他の通信でも失敗することはある。
376:デフォルトの名無しさん
10/06/07 12:12:39
FFFTPとかのいい加減枯れてるツールでも結構なるしな
そう言うモンだと思って回復手段作り込むしかあんめ
377:デフォルトの名無しさん
10/06/07 12:21:13
タイムアウト、リトライ、リジュームあたりを実装したら、
FTPはまともな動きになるだろう。
378:デフォルトの名無しさん
10/06/07 20:51:14
そこまで望む場合は自分で作ればいい。
FTPなんてチョー簡単だし。(PASV実装とかチョイ面倒くさい程度)
379:デフォルトの名無しさん
10/06/07 21:33:36
>>378
.net frameworkだけで手軽に実装できるだろ。
380:デフォルトの名無しさん
10/06/07 23:19:51
Windowsアプリケーションにて、画像の上に透過的な四角い枠線(色付き)を重ねたいのですが、
どのように実装したらよいでしょうか?
宜しくお願いします。
381:デフォルトの名無しさん
10/06/07 23:50:40
>>380
Panelでできないっけ。
今もPanelあるんだっけ。
382:デフォルトの名無しさん
10/06/08 00:02:47
>>380
現状ではコントロールは親コントロールに対してしか透過してくれないんだよね。
まぁ動かしたりするんなら糞重たくなるけど、その枠が乗る範囲が対象の画像のどこにあたるかを計算してその部分の画像データを枠を描画するコントロールの背景に描画とか。
まぁサクサク動いて透過もできてってなるといっそのことDirectXやOpenGLに2次元的な描画をするしかない。
383:デフォルトの名無しさん
10/06/08 00:58:16
PictureBoxの子に枠線のPictureBoxなり追加すりゃいんでね
384:デフォルトの名無しさん
10/06/08 08:05:10
>>383
WinFormだと透過を扱うのは面倒だよ
385:デフォルトの名無しさん
10/06/08 08:31:38
OnPaintの内部で好きなように描けばいい。
386:デフォルトの名無しさん
10/06/08 10:13:32
PictureBoxをはみ出す可能性があるなら厄介
OnPaintだったら一切コントロール使わずに重なる可能性のあるもの全部
自分で描かないといけない
387:デフォルトの名無しさん
10/06/08 10:32:26
どのレベルの運用なんだろう?
例えばユーザーがドラッグドロップした部分に枠を描画してそれを消したりすることが出来なければいけないなら
自分でレイヤーみたいなデータを順番に記憶してクリックされたら枠線描画して移動できるようにする
とかいろいろ考えられるけど
388:デフォルトの名無しさん
10/06/08 11:33:45
透明なウィンドウを重ねるのが確実
そういうの多用するんだったら努力するだけ時間の無駄だからさっさとWPFへ
389:デフォルトの名無しさん
10/06/08 23:31:04
FtpWebRequestのAbort忘れかも。
390:デフォルトの名無しさん
10/06/09 02:02:52
枠引くくらいなら枠線用のPictureBoxなどを配置して上に置いて
Regionで内側を切り出すのがほどほど楽だと思うよ。
391:デフォルトの名無しさん
10/06/09 05:21:48
コントロールの重ね合わせは数が増えると重くなるからスピードが必要ならDirectX
392:デフォルトの名無しさん
10/06/09 09:55:17
C#2.0 マルチスレッドで質問です
short型の変数Aがあるとします。
メインスレッドはある変数Aを読み込むだけ
サブスレッドはある変数Aを書き換えるだけ
上記のような状態で通常
書き込み時に適当なオブジェクト等を使用してロック・読み込み時もロック
するような気はするんですが
仮に
両方ロックしない場合で
サブスレッドで
変数Aが 0(16bit全てOFF)の値になっている時に
変数Aを65535(16bit全てON)に変更したとします。
この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?
ちょっと質問の仕方が微妙かもしれませんがお願いいたします。
393:デフォルトの名無しさん
10/06/09 10:18:11
CPU命令の最小単位考えたらわかるべ
394:デフォルトの名無しさん
10/06/09 10:21:15
>>392
> この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
> その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?
32bitプロセスでは32bitまでならアトミック
そんなの気にするよりvolatile
395:デフォルトの名無しさん
10/06/09 22:28:13
>>392
URLリンク(download.intel.com)
この資料のp.258に
> インテルPentium 4 プロセッサ、インテルXeon プロセッサ、P6 ファミリ・プロセッサ、
> インテルPentium プロセッサ、Intel486 プロセッサでは、キャッシュ可能メモリへのア
> クセスで、バス幅、キャッシュ・ライン、ページ境界をまたがっているものは、アト
> ミック操作が保証されない。
とあるので、そういう状況が起こる可能性はゼロじゃない。
本当にアトミック操作が必要な場合は、あなたの言うとおり、ロックするなりアトミック操作
命令をつかうなりする。
396:デフォルトの名無しさん
10/06/09 23:29:37
shortの変数がそれらをまたがる可能性があるということか
397:デフォルトの名無しさん
10/06/09 23:46:29
C#の場合はアライメント境界整列は保証されるとどっかで読んだ記憶が
まあ将来に渡って保証されてる訳でもないだろうけどな
398:デフォルトの名無しさん
10/06/10 00:46:26
MSDNのInterlocked.Readとか読んでると保証されるとも取れるようなことが書いてあるよ
399:デフォルトの名無しさん
10/06/10 01:13:01
StructLayoutした構造体でも適用されるのだろうか・・・
マーシャリング機構が魔法を使ってくれてるかもしれないから否定しているわけじゃない。
400:デフォルトの名無しさん
10/06/10 02:10:54
>>392
それやると大抵は読み込むだけのスレッド側の処理は最適化で消えて読み込まなくなるから
中途半端に読み込む状態を仮定する以前の動作になるよ。
401:デフォルトの名無しさん
10/06/10 02:52:11
volatileぐらいわかるよバカやろう
402:デフォルトの名無しさん
10/06/10 03:34:05
>>392
なんでそういう事をわざわざ考えるのかよくわからないけど
ReaderWriterLockつかえば解決とか言う話でもないの?
403:デフォルトの名無しさん
10/06/10 03:38:57
アトミックな操作が本当にそうなのかについて疑問に思ったんじゃないの?
いいことだと思うよ。
404:デフォルトの名無しさん
10/06/10 06:40:13
なんでそうなるのかとかは知っといた方がおもしろいよね。
405:デフォルトの名無しさん
10/06/10 12:34:40
GCが配置する時に8バイト境界にするってどこかで見た覚えがあるんだがどこだったかな
406:デフォルトの名無しさん
10/06/10 12:42:42
レジスタのビット書き換えフェーズ中に割り込みか同時読み込みできる
そういうすごいCPUの話じゃないの?
407:デフォルトの名無しさん
10/06/10 13:36:17
>>392
short型ならすべてのビットが同時に書き換えられる。1ビットずつ順番ではない。
もちろんプログラムが1ビットずつ書き換えるように作ってあれば話は別だけど、単純に
A = 0;
A = 65535;
のように代入するだけならすべてのビットが同時に変更される。
もし中途半端な状態が発生したら、それはメモリの故障。
408:デフォルトの名無しさん
10/06/10 13:51:19
>>406
物理コアが複数だと、そう言い切れなかったりする
上でも何回か出ているアライメント境界の問題で、
複数回フェッチが起こる可能性があるからだ
ここらはキャッシュコヒーレンシとか色々関係しててややこしい
409:デフォルトの名無しさん
10/06/10 15:08:02
横レスなんだけど
>>407
いろいろ読む限り仮にこれが32bitOSでLongだったら書き換えは複数回に分割されてしまうということなんだろうか?
410:デフォルトの名無しさん
10/06/10 15:28:17
仕様としてはどうなっているんだ?
411:デフォルトの名無しさん
10/06/10 15:50:08
5.5 変数参照の分割不能性
bool、char、byte、sbyte、short、ushort、uint、int、float の
各データ型および参照型の読み取りと書き込みは分割不可能です。
また、上記の型を基になる型に持つ列挙型の読み取りと書き込みも
分割不可能です。long、ulong、double、decimal などのその他の
データ型、およびユーザー定義型の読み取りと書き込みは、分割不可能
であることが保証されていません。この目的で設計されたライブラリ関数を
除いて、インクリメントやデクリメントの場合などでの分割不可能な
読み取り/変更/書き込みは保証されていません。
412:デフォルトの名無しさん
10/06/10 19:34:34
>>411
CPUレベルではともかく、CLRレベルでは保証されてるってことか。
413:デフォルトの名無しさん
10/06/10 20:38:48
32bit以上での実装を事実上想定しているわけだ。
414:デフォルトの名無しさん
10/06/10 21:36:58
16ビットCPUだったらintも16ビット長じゃね?
.netが16ビットでも動くかは知らんけど
415:デフォルトの名無しさん
10/06/10 21:41:29
intは32bitと決められている。
416:デフォルトの名無しさん
10/06/10 21:50:44
intが可変な言語って数えるほどしかない
417:デフォルトの名無しさん
10/06/10 21:52:51
CLRは32ビットプロセスなら32ビット境界に、64ビットプロセスなら64ビット境界に整列することを保証してる。
もちろんライアウトを変えた場合は別。
だから、少なくとも32ビット以下のプリミティブ型の読み書きはアトミック保障。
418:デフォルトの名無しさん
10/06/10 21:53:06
そういう言語では組み込み型はそのまま使わずにtypedefしてサイズを固定するという
アホらしいノウハウが定着してる事実
419:デフォルトの名無しさん
10/06/10 21:53:57
ああ書き方おかしかった。
ライアウト→レイアウト。
で、そういうことやってない限りは保障されてる。
420:デフォルトの名無しさん
10/06/10 21:56:44
>>402
何のためだよw
421:デフォルトの名無しさん
10/06/10 21:58:16
つうわけで現実的には、32ビット以下ならvolatil変数、
32ビットを超えるものはlockするのが簡単。
422:デフォルトの名無しさん
10/06/10 22:09:14
ところでlongはvolatileにできないけど
IntPtrや参照型のvolatileは64bitプロセスでどうなってるんだろう?
423:デフォルトの名無しさん
10/06/10 23:33:39
64bit環境なら普通に問題ないだろ。
424:デフォルトの名無しさん
10/06/10 23:38:28
64ビット環境では当然64ビットの読み書きは分割不可能。
425:デフォルトの名無しさん
10/06/10 23:47:07
x64とia64で違ったりしないのかな
426:デフォルトの名無しさん
10/06/11 01:13:50
分割「不可能」って表現はどうなんだろうねえ。
427:デフォルトの名無しさん
10/06/11 01:19:47
atomicの定訳がないからねえ。「不可分」で良さそうなもんだが。
428:デフォルトの名無しさん
10/06/11 01:40:34
相談室の方だしアトミックとだけ言っとけば通じるんじゃないか?
429:デフォルトの名無しさん
10/06/11 02:33:51
今更このスレでアトミックや分割不可能の意味がわからん奴もいないと思うんだが・・・
まぁMSDNにもそう書いてあるんだし、そのままでいいんじゃないか?
というか、やっぱPGて細かく突き詰めると深いよなぁ と改めて思う
430:デフォルトの名無しさん
10/06/11 11:50:42
なぁ、紐づく・紐付ける・紐づいたXX って英語でなんていうんだ?
てか、紐づくの語源はどっから?
431:デフォルトの名無しさん
10/06/11 12:00:03
そんなの
関係する
とかに置き換えたらいかんの?
語源はググってくれ
432:デフォルトの名無しさん
10/06/11 12:34:12
そう言えば、英語と1対1な用語じゃないような気がするねえ。
link,bind,relationshipのいずれかを局面に応じて使うんじゃないかな。
433:デフォルトの名無しさん
10/06/11 12:47:27
associateとかもあるな
434:デフォルトの名無しさん
10/06/11 18:55:47
A (which is) tied together with B とか
435:デフォルトの名無しさん
10/06/11 22:53:09
assigned とかは?
命名スレ行きかな
436:デフォルトの名無しさん
10/06/12 18:00:58
wiredだな
437:デフォルトの名無しさん
10/06/13 01:55:45
weirdとな
438:デフォルトの名無しさん
10/06/13 13:04:54
URLリンク(techbank.jp)
この記事の意味わかる人いる?
439:デフォルトの名無しさん
10/06/13 13:11:10
確かに全くわからない
new { trueValue = new BitVector32(-1), falseValue = new BitVector32(0) }と
new { trueValue = new BitArray(1)[0] = true, falseValue = new BitArray(1)[0] = false }
を比較したら処理速度以前に値型と参照型の違いで前者が速いに決まってる
何がしたいのかも意味不明
440:デフォルトの名無しさん
10/06/13 13:24:00
>new BitVector32(-1)[(int)BitFlag.TrueIndex]
BitFlag.TrueIndexは0のことだから、
>new BitVector32(-1)
-1じゃなくても何を渡してもたとえ0でもTrueになるしな。
441:デフォルトの名無しさん
10/06/13 13:26:43
>new { trueValue = new BitArray(1)[0] = true, falseValue = new BitArray(1)[0] = false }
これに至ってはビットセットしてるつもりで実は取得しかしてない気がする。
442:デフォルトの名無しさん
10/06/13 13:27:44
Microsoft MVPかよw
443:デフォルトの名無しさん
10/06/13 13:41:36
>>441
逆
設定はしてるけど取得はしてない
trueValueに代入されるのはリテラルのtrue
444:デフォルトの名無しさん
10/06/13 14:10:33
(int16)trueが1になったり-1になったりする!大発見!スイーツ(笑)
ってことか?
445:デフォルトの名無しさん
10/06/13 14:16:21
回数増やすと差が開くのはGCが動くからかな?
なんにせよそんなBitArrayの使い方ありえない
446:デフォルトの名無しさん
10/06/13 14:30:00
本人も言ってるけど、本当に
> プログラミング言語論やアルゴリズムに元々興味がなかった
んだろうな。
447:デフォルトの名無しさん
10/06/13 14:42:15
そうだとしてもこれ普通に仕事に支障が出るレベルじゃね
448:デフォルトの名無しさん
10/06/13 14:44:24
Console.WriteLine("BitVector32の-1: {0}", ....
そりゃ何やったって-1が出るよな。
449:デフォルトの名無しさん
10/06/13 14:53:20
>>440
BitVector32の仕様を理解してない? インデクサの引数をマスクじゃなく
インデックスだと思っているとか。
450:デフォルトの名無しさん
10/06/13 14:54:15
>>438
あれ? コメント消えた?
451:デフォルトの名無しさん
10/06/13 15:07:19
?
452:デフォルトの名無しさん
10/06/13 15:08:41
貼ったのは本人かよwwwwww
453:デフォルトの名無しさん
10/06/13 15:13:54
というか記事自体消えたw
454:デフォルトの名無しさん
10/06/13 15:26:45
流石はMVPだな
455:デフォルトの名無しさん
10/06/13 19:55:01
丸ごと消して逃げるってのは技術者の態度としては酷いなあ
別に誰だって間違いはあるんだから、素直に分かってませんでした、でいいのに。
456:デフォルトの名無しさん
10/06/13 20:05:52
…ほかの記事も全部巻き込んでコメント消えたな…
どうなってんだ…真面目に聞いてたのに…
あーあ、どうせ荒らされたからコメント停止したとか、そういうことにされてんだろうな
457:デフォルトの名無しさん
10/06/13 20:12:09
まあそれぐらいで許してやれよ。
打たれ強い人ばかりじゃないんだ
458:デフォルトの名無しさん
10/06/13 20:28:22
誰かコメントできっついことでも書いたか?
気づいたらもう消えてたから経過が分からん、まあおそらくはそうなんだろうけど。
しかしこれじゃ記事で気になることがあってもどうしようもないな。
techbank.jp って書籍とかも出してるからそれなりに影響力ありそうなんだが…
ユーザ登録して掲示板に書けってことか…面倒な…
459:デフォルトの名無しさん
10/06/13 20:59:29
カエル女あわれ・・・
460:デフォルトの名無しさん
10/06/13 21:38:47
>>458
キツいことは書かれてたね。
言葉はキツかったけど正しい指摘ではあった。
確かに誰もが打たれ強いわけじゃないってのは分かるけど
書籍出したり、MVPだったりする人間が技術的な指摘に逃げ腰ってのはダメだよ。
461:デフォルトの名無しさん
10/06/13 21:49:30
そのとおり。
462:デフォルトの名無しさん
10/06/13 22:39:03
>>460
あれ書いたの俺なんだけど、まさか丸ごと消されるとは思わなかった。
MVPだし、本出してるし、コミュニティの運営にも積極的な人みたいだから、
反論するにせよ訂正するにせよ、少なくとも真摯な態度で答えてもらえるもんだと
思っていたんだよね。
まあ、確かに言葉はきつかったけど、まともな質問に上から目線で適当な回答をしてるのが
腹立たしかったもんでね。
残念だね。
463:デフォルトの名無しさん
10/06/13 22:46:10
RSSには
BitVector32 vs BitArray を掲載しました
ってのが残ってるけど、どんな中身だったのか分からない
どっかに中身のっけてくれ
464:デフォルトの名無しさん
10/06/13 22:47:34
MVP事務局に、報告しといた方がいいと思う。
465:デフォルトの名無しさん
10/06/13 22:49:57
まゆみちゃーん
466:デフォルトの名無しさん
10/06/13 22:50:22
>>463
Googleのキャッシュで記事はまだ見れるね。
467:デフォルトの名無しさん
10/06/13 22:52:50
URLリンク(cache.yahoofs.jp)
これか。何が間違ってるのかわからんw
468:デフォルトの名無しさん
10/06/13 22:55:24
間違ってるというより何一つ意味を為してないんだな
書いてる本人が自分で何やってるのかわかってないからわざと曖昧に書いてるのが伝わってくる
469:462
10/06/13 23:02:40
あんまり突っ込みどころが多いから、逐一指摘してたらコメントが長くなるし
変な人だと思われそうだから、1点に絞って突っ込んだんだけどね。
いっそ高木浩光ばりに突っ込みまくった方が良かったのだろうか?
470:デフォルトの名無しさん
10/06/13 23:07:48
>>469
あー、私知らなかったわー。って感じの文章なんだから、もっとソフトにやってあげてもいいんじゃない。
471:デフォルトの名無しさん
10/06/13 23:08:30
どんなコメントだったん?
472:デフォルトの名無しさん
10/06/13 23:10:28
GoogleもYahooもキャッシュにコメントがないなあ
Bingはキャッシュすらないし
473:462
10/06/13 23:17:13
細かい文章は覚えてないが、
BitVector32::ItemsとBitArray::Itemsの戻り値を整数として評価すると異なる値になると
あなたは言っていますが、.NetのBoolean型は整数と可換なものではないので、整数として
評価することに意味はありません。また、内部的にも1ビットの整数として実装されていますので、
整数に変換した結果は毎回同じです。-1が出力されているのは、あなたがConsole.WriteLineの
フォーマット文字列に“-1”と書いたからです。
基本的なデータ型について理解していないのはあなたの方です。正当な疑問に木で鼻をくくったような
返答をする態度は非常に不愉快です。
といったところ。最後に余計なことを言っているけど、これは以前にコメントをしていた人に、
ビット操作の概念を勉強しないとこの記事は理解できないよ、というような返答をしていたので、
それに対するもの。
474:デフォルトの名無しさん
10/06/13 23:21:55
.NETのboolは8ビットで0がfalseで0以外がtrueじゃなかったっけ
記事の間違いは別問題だが
475:デフォルトの名無しさん
10/06/13 23:22:23
記事ごと消すほどのコメントじゃないわな。
476:デフォルトの名無しさん
10/06/13 23:31:53
たまたま残ってたから一応書いておこう。
最初のコメント
----
> まとめると、
> BitVector32 BitArray
> true -1 を表す 1 を表す
> false 0 を表す 0 を表す
> となります。
これはいったいどういう意味でしょうか?
----
その返答
----
ビットフラグがONの場合がTrue、ビットフラグがOFFの場合はFalseです。
このON/OFFを数値で表した場合、BitArrayとBitVector32とではON/OFFの数値の意味が異なるという対比表になります。
そもそもビットの概念がわかっていないと、このBlogの説明に書いてある説明を理解しようとしても無理ですので、もし貴方がビットの考え方が良くわからないという場合は、
入門書籍やほかのWebサイトでその辺りを勉強してから、このBlogに書いてある意味を汲み取ってください。
----
477:デフォルトの名無しさん
10/06/13 23:36:23
いきなり攻撃的な返答だな。あの日だったりしたのか?w
478:デフォルトの名無しさん
10/06/13 23:37:23
記事は消えても画像は残ってるんだな
URLリンク(techbank.jp)
479:デフォルトの名無しさん
10/06/14 01:01:27
マルチスレッドで教えてください。
ソケットプログラミングで、受信スレッドがキューにデータを溜めて、
メインスレッドは順次データを読み出して処理するというプログラムを書いています。
メインスレッドはキューにデータが無ければ受信するまで待機したいのですが、
一般的にどう実装するものでしょうか?
とりあえず作った受信スレッドは、
Monitor.Enter(obj);
受信ループ
キューに格納
Monitor.Exit(obj);
Monitor.Enter(obj);
ループEnd
Monitor.Exit(obj);
受信の都度Exitしてメインスレッドに所有権を明け渡しています。
動作には問題なさそう?なんですけど、なんかスマートじゃないというか。。。
480:デフォルトの名無しさん
10/06/14 01:05:17
AutoResetEventつかう
481:デフォルトの名無しさん
10/06/14 01:12:17
lock (q)
ループ開始
}
482:デフォルトの名無しさん
10/06/14 01:13:28
ミスって書きこんじまった、なしなしな
483:デフォルトの名無しさん
10/06/14 01:16:31
BlockingQueue系統を使うのが定石だが、
.NET 4より前にはなかったな確か。
BlockingQueueとか実装はそこらに転がってそうだが。
484:デフォルトの名無しさん
10/06/14 01:19:51
>>479
.Net4が使えるなら BlockingCollection<T> 一択。
つかえないなら、↓こういう同期機能付きコレクションを使う。
URLリンク(www.codeproject.com)
いずれにしても、そういうパターン(いわゆるProducer-Consumerパターン)では
同期機能はキューに持たせるのが一般的。で、Producer(この場合は受信スレッド)は
データをキューに入れるだけ、Consumer(この場合はメインスレッド)はキューから
取得するだけにする。
485:デフォルトの名無しさん
10/06/14 07:08:32
MVPって最初の頃(2003年とかその頃)はいいなと思ってたんだが、わんくま同盟とか言い出した頃から
馴れ合い色が強くなってきて、なんていうか、このブログの主はMVPになる条件を満たしていないにも
かかわらず、推薦制度を悪用してMVPになった感があるな。
こんなんがアドバイザとして高い金を取ってるかと思うとなんともいえない気持ちになる。
MVPを専属で引っ張ると100万/週ぐらい取らなかったか?
次回剥奪されると良いが。
486:デフォルトの名無しさん
10/06/14 07:29:51
>>485
> MVPを専属で引っ張ると100万/週ぐらい取らなかったか?
そんなに価値あるのか?
まあ、すごいのはいる。
487:デフォルトの名無しさん
10/06/14 07:47:51
nyaruruとかって本業何してんの?
488:デフォルトの名無しさん
10/06/14 07:52:15
そんなに取れません。n氏はGoogleに・・・。
489:デフォルトの名無しさん
10/06/14 08:00:19
GoogleだとWindows使えなくなるじゃん
大丈夫かな
490:デフォルトの名無しさん
10/06/14 08:30:10
CodeProjectでじゃんじゃん記事書きまくってる奴とか、凄いのがいる。
日本語サイトでMVPを名乗ってる奴の中には、こういうしょうもないのが時々いるから
あんまり信用はしてないけど。
この人も結構メディアに露出しているけど、信用をなくすような行動取って大丈夫なのか?
「わかってませんでした。精進します」って言えば済んだことなのに。
491:デフォルトの名無しさん
10/06/14 09:32:56
>MVPを名乗ってる奴の中には
MVPは別に実力に関係ないしな
まぁ色々特典もらえるのは正直うらやましい
492:デフォルトの名無しさん
10/06/14 13:33:26
どこがじゃ
493:デフォルトの名無しさん
10/06/14 13:49:43
>>492
MVP乙
494:デフォルトの名無しさん
10/06/14 20:33:37
まあMVPに実力は関係ないな。
でも、一つのテーマでコミュニティ築く力は凄いと思わない。
495:デフォルトの名無しさん
10/06/14 21:05:26
うん。思わない。
496:デフォルトの名無しさん
10/06/14 21:47:57
思わないんかいw
MVPって数結構多いよね。
497:デフォルトの名無しさん
10/06/14 21:50:59
一時期、ものすごい増えて、今は多少減ったみたい。
498:デフォルトの名無しさん
10/06/14 22:26:37
高い金取るのってエバンジェリストとかそういうのじゃないっけ?
コンサル
499:デフォルトの名無しさん
10/06/14 22:36:01
>>480-484
レスサンクスです。
Producer-Consumerパターンでぐぐったらズバリ出てきました。
こんな一般的な話だったなんて・・・orz
500:デフォルトの名無しさん
10/06/14 22:43:43
シングルスレッドではproducerとconsumerの同期がとれないってのが、
プログラムをマルチスレッド化する大きな動機の一つだもんな。
501:デフォルトの名無しさん
10/06/14 23:32:24
うん。
502:デフォルトの名無しさん
10/06/15 06:54:05
マルチスレッドといえば.Net4使ってるのに生のthreadやらthreadpoolやらを使ってる奴は何がしたいのかわからん
どれだけ俺様ライブラリを量産したいのかと小一時間(ry
503:デフォルトの名無しさん
10/06/15 12:20:19
Producer-Consumerパターンなら生だろうとBackgroundWorkerだろうと大して変わらんだろ
504:デフォルトの名無しさん
10/06/15 21:08:21
そういうことじゃないだろ。
505:デフォルトの名無しさん
10/06/15 21:18:56
ほう
506:デフォルトの名無しさん
10/06/15 21:49:26
>>502はプロデューサーコンシューマーに限った話はしてないよね。
507:デフォルトの名無しさん
10/06/15 22:04:20
そんなMSの俺様クラス作られても、いつサポートされなくなるか分からないしな。
508:デフォルトの名無しさん
10/06/15 22:36:19
しかしまぁ大手のマルチスレッド関連の記事は古いものばかりだな
忙しくなけりゃ俺が寄稿してあげたいぐらいだわ
509:デフォルトの名無しさん
10/06/15 22:37:49
>>508
ブログにでも書け
キーワードさえうまく配置してればそのうち広まるよ
510:デフォルトの名無しさん
10/06/15 22:38:57
俺様ライブラリ(車輪の再発明)批判はいいとして、
それがどうして「生のthreadやらthreadpoolやらを使」うことがそれだって言うの?
そっちの方が意味がわからんよ。
511:デフォルトの名無しさん
10/06/15 22:46:06
>>458
んーこのblogなんとなく見てたら気になるとこいっぱいあるな…
でももうコメントもできんし。
っていうかだれかすでにコメントしてて消えちまったのかもしれんが。
512:デフォルトの名無しさん
10/06/15 23:52:40
>>504
.NET4触ってないからよくわからないんだが、Threading.threadは使わずにBackgroundWorker使えって事?
それとも.NET4はもっと便利なのがあるってこと?
513:デフォルトの名無しさん
10/06/16 00:06:43
あるよ
514:デフォルトの名無しさん
10/06/16 00:34:11
>>512
Task クラスとか、Parallel クラスとかが増えた。
515:デフォルトの名無しさん
10/06/16 06:25:10
目的が異なるものを比較する意味がわからん
516:デフォルトの名無しさん
10/06/16 06:41:52
え?w
517:デフォルトの名無しさん
10/06/16 09:26:18
は?
518:デフォルトの名無しさん
10/06/16 10:08:53
あ?w
519:デフォルトの名無しさん
10/06/16 10:10:59
お?
520:デフォルトの名無しさん
10/06/16 11:26:09
並列用のパラレルAPIやParallel Linqで、GUIの非ブロック化処理を書いちゃうわけか。
それはそれでやばげだな。
521:デフォルトの名無しさん
10/06/16 12:30:20
誰かいないのか?
それはそれでやばげだなって言ってんだろ!
522:デフォルトの名無しさん
10/06/16 14:07:14
ふざけんな!
俺がやばげだなつってるんだから反応しやがれ!
523:デフォルトの名無しさん
10/06/16 16:01:52
だあれもいない(´・ω・`)ショボーン
524:デフォルトの名無しさん
10/06/16 17:36:48
それはそれでやばげだが、それもありなんじゃないかなって、今はそう思えます。
525:デフォルトの名無しさん
10/06/16 20:29:38
.net4はキャンセルフレームワークが追加されたのがいいな
これでマルチスレッドを使う人がちゃんとキャンセル実装をするようになればいいが…
526:デフォルトの名無しさん
10/06/16 20:34:27
耳毛、鼻毛を笑う。
527:デフォルトの名無しさん
10/06/16 21:27:25
しかし、そんなスレッドを酷使するような計算量のアプリって書いたことないなぁ。
あると欣喜雀躍する人がいるのは分かるがパンピーなプログラマでそんなもの要るの?
ちゃんとプロファイリングしてれば、キャンセルなんて考える必要なんて無いのが経験則。
それとも皆、もしかして物理シミュレーションとか暗号鍵解読とかでもやってるのか?
528:デフォルトの名無しさん
10/06/16 21:32:56
スレッドを酷使するかどうかとキャンセルを考えるかどうかがなんで同列に並んでんの?
俺の経験からいけばそれらは関係がないんだけど。
529:デフォルトの名無しさん
10/06/16 21:37:11
いや、長時間じゃなくてもGUIアプリで計算しようとしたら別スレッドにするだろ。
しない?なら言う事は何も無いな。
530:デフォルトの名無しさん
10/06/16 21:38:45
C#でGUIアプリをつくったらそれを別スレッドで行わないことが困難だろう。
531:デフォルトの名無しさん
10/06/16 21:40:50
パラレルを活用するのはそれなりに限られてるけど、
タスク系統は普通に使うでしょ。
532:デフォルトの名無しさん
10/06/16 21:45:24
>>527はどうしようもないバカ
スレッドのキャンセル書けないバカは一生マルチスレッドするな。
533:デフォルトの名無しさん
10/06/16 22:25:39
こうやってみるといかにマルチスレッドを使いこなしてないかわかるな
まぁちゃんとわかって仕事で使ってる人間なんてほんの一握りなわけだが
534:デフォルトの名無しさん
10/06/16 22:32:55
むしろよくわからないなら使わない方が良いとは思う。
大抵のビジネスアプリは使わんでも何の問題もない。
535:デフォルトの名無しさん
10/06/16 22:44:38
俺はビジネスアプリ作ってるけどかなり多用してるな
とはいえあまり見ないのもたしか
UIがフリーズしたり複数のタスクが同時に出来ないアプリが多い事多い事…
536:デフォルトの名無しさん
10/06/16 22:51:31
仕事だと危険すぎてやらせる気にならんのだよね。
自分だけで作る部分ならいいんだが。
537:デフォルトの名無しさん
10/06/16 22:51:45
ぶっちゃけスレッドって難しいじゃん
サンプル程度のものなら簡単に理解できるし実装も簡単だけど
いざちゃんとやろうと思ったら同期、同調、排他、例外処理、キャンセル、etc...と糞難しい
設計力も数段上の力が求められるしさー
業務系とかそれが出来ないからモーダルウィンドウに逃げてる人多いじゃんよ
538:デフォルトの名無しさん
10/06/16 23:00:14
中級者御用達のクック本。
その中でも最も難易度の高い非同期項目みて”超初心者向けだな”とか思える人が集まらないと実務じゃ無理。
539:デフォルトの名無しさん
10/06/16 23:03:48
マルチスレッドは怖いです
540:デフォルトの名無しさん
10/06/16 23:04:36
はいはい
541:デフォルトの名無しさん
10/06/16 23:06:39
実際のところ、UI止めたくないから裏でスレッド、くらいにしか使ってない。
542:デフォルトの名無しさん
10/06/16 23:11:53
GUIの裏で計算だとか通信だとかするならbackgroundworkerでよくね?
MSもこういう用途のために作ったんじゃないのかね
普通の受託開発屋なら通信部分って自前で書かない場合多いし
543:デフォルトの名無しさん
10/06/16 23:12:20
低能だからね。
544:デフォルトの名無しさん
10/06/16 23:30:05
>>542
だってそれ使うと同調しにくいじゃん…
スレッドも一本しか使わないし…
それ以上にUIにベッタリな仕様だからビジネスロジック部分には不向き
複数のスレッドで別々の処理をやってある時点で非同期に集計してその後にまた別の処理を…
なーんてことやると一気に難易度がググーーーンと上がっちゃいます!><
545:デフォルトの名無しさん
10/06/17 00:05:35
出来るならやりゃいいと思うけど
適当に人あつめると出来ない人の方が多いからなあ。
低い方に合わせて作らんと死ぬよね
546:デフォルトの名無しさん
10/06/17 00:17:18
UI止めないのは操作感の改良だから、多重の並列処理はできないようにしてるが、
特に客から文句言われた事ないな。
計算が遅けりゃ十中八九はデータの持ち方とかに問題があって遅いから、遅いと
文句言われたら改良する。
文句言われなけい限り、保守とかが楽な方に意図的に流してる。
でもスレッドとか(あと信じられないことにコレクション)をヘルプのサンプル引き写し
レベルで使ってるだけで、マニアックだとか難しくて他の人が保守出来ないから
チーム作業ではやめてくれないかとか罵倒されて
(´・ω・`)。。。(いくらなんでもあんたらが時代遅れだろ)
とか思うが相手が大多数なので言えない。
これは俺の勤め先がブラックなんだよな、な?一般的じゃないよな?(マ板行け自分)
547:デフォルトの名無しさん
10/06/17 00:19:42
>>544
勝手に上がればーーーーか(´・ω・`)
548:デフォルトの名無しさん
10/06/17 00:23:53
>>544
そういう時はほかの方法でやるだろうよ。
549:デフォルトの名無しさん
10/06/17 00:40:39
外資の俺が言うのも何だが未だに国内で組んでるエンジニアはレベルが低いな…
スレッドぐらい使いこなせよ…
550:デフォルトの名無しさん
10/06/17 00:43:35
>>549
>スレッドぐらい使いこなせよ
レベルの低い会社に勤めてるのですねw
551:デフォルトの名無しさん
10/06/17 01:00:29
まあ自称分かってるやつが一番地雷なんだけどな。
552:デフォルトの名無しさん
10/06/17 01:08:08
使いこなせてる俺はいつの間にやら上級PGだったようだ
おまえ等、俺に挨拶は?
553:デフォルトの名無しさん
10/06/17 01:08:35
URLリンク(blogs.msdn.com)
なんでvolatileなのに問題が発生するのか説明してみて。
554:デフォルトの名無しさん
10/06/17 01:15:18
>>553
説明もなにも二つのスレッドが協調すべきなのにその操作をいれてないからだろ
そのブログじゃ同時に実行される云々いってるがスケジューラの指定が無い以上どっちが優先されるのかはプロセッサ任せ
つーかロックすらかけてない互いの状態弄って何がしたいのかわけわからん
volatileは全く関係ねぇよ
ふー、やっぱ俺って天才だわ
上級PGなめんなよ!
555:デフォルトの名無しさん
10/06/17 01:29:58
>>554
何を言ってるんだお前は…
556:デフォルトの名無しさん
10/06/17 01:35:27
volatileには順序保障の役割がある。
・volatile読み込みより前の書き込みは必ず先に実行される
・volatile書き込みより後の読み込みは必ず後に実行される
にも関わらず>>553ではすべての読み書きがvolatileなのに順序問題が起こる。
これはなぜか説明してみろという話。
557:デフォルトの名無しさん
10/06/17 01:42:14
いや、
・volatile書き込みより前の書き込みは必ず先に実行される
・volatile読み込みより後の読み込みは必ず後に実行される
かな
558:デフォルトの名無しさん
10/06/17 01:58:43
だからレジスタ依存=プロセッサに依存するつってんだろー
それを阻止する為に~やりましょうとかずれてるわけで
ちゃんとやるならロックや適切なスケジューラを指定するのが常なんだよ!
上級PGなめんなよ!
559:デフォルトの名無しさん
10/06/17 02:06:04
上級な土方
560:デフォルトの名無しさん
10/06/17 02:09:16
まったく何でかが知りたいならO-o-Oでググれや
上級PGなめんな!
561:デフォルトの名無しさん
10/06/17 02:16:05
え、volatileに同期処理なんてあるの?初耳だわ。
562:デフォルトの名無しさん
10/06/17 02:22:54
同期じゃねぇよ
ただのコンパイラ最適化防止の為じゃ
そして>>553の記事は最適化は防げてもプロセッサの最適化(OoOのね)は防げないから任意でThread.MemoryBarrier()挟んでメモリバリアしろよタコ助共つーこと
上級PGなめんなよ!
つーかスレッド使う予備知識の基礎中の基礎だろ!
563:デフォルトの名無しさん
10/06/17 03:30:13
>>546
俺もいい言葉を言われたことがあるので伝えておくよ。
「ジェネリクスは信用してないから禁止」
564:デフォルトの名無しさん
10/06/17 03:57:44
>>561
C++のvolatileと混同してない?C#のにはあるよ。
ただOoOに対しては有効じゃないのかなぁ。
565:デフォルトの名無しさん
10/06/17 04:49:42
初鼻だわ。
566:デフォルトの名無しさん
10/06/17 05:59:33
あのな、スレッド関係で、順序保障の機能ってのはOoOの順序問題とかの解決に使う。
当然、C#のvolatileは順序を保証するために使える。
ではなんで>>553では全部volatileなのに順序問題が発生するのか。
567:デフォルトの名無しさん
10/06/17 06:14:20
参考
URLリンク(msdn.microsoft.com)
568:デフォルトの名無しさん
10/06/17 06:32:28
つまり>>551
569:デフォルトの名無しさん
10/06/17 06:42:49
参考
URLリンク(www.microsoft.com)
この辺が詳しいな。
570:デフォルトの名無しさん
10/06/17 06:56:55
>>563
デリゲート禁止ってのもあった・・・
571:デフォルトの名無しさん
10/06/17 08:55:56
いつからvolatileがOoOの順序保障が行われるようになったのやら
ほんとレベル低いな
572:デフォルトの名無しさん
10/06/17 10:30:22
>>563
医者が扱う薬の話かよ
573:デフォルトの名無しさん
10/06/17 10:51:05
/ufcpp.net/study/csharp/sp_thread.html
volatileって何だろうと思って凄腕の人の解釈見たらコンパイラの最適化防止ってかいてあるお
ゆとりPGをなめんなおっおっ( ^ω^)
574:デフォルトの名無しさん
10/06/17 13:38:23
>>573
最適化でその変数がなかったことにされるのを防ぐだけ
575:デフォルトの名無しさん
10/06/17 13:41:28
何のために?
576:デフォルトの名無しさん
10/06/17 13:43:09
グローバル変数的に使うために用意した変数が、同ファイル中で手をくわえられてないから最適化で削除されちゃう
とかを防ぐためじゃなかったっけ。
577:デフォルトの名無しさん
10/06/17 13:43:56
コンパイラが不要だと思っても、実は他のスレッドが
必要としているかもしれないから。
578:デフォルトの名無しさん
10/06/17 13:44:31
volatileは順序保障するとか言ってた奴出てこいw
579:デフォルトの名無しさん
10/06/17 13:46:14
あぁ、スレッドであれこれするときに読むんだけど、おまえそのスレッドでその変数変更してねえのになんで読むんだよ
それいらねえだろってコンパイラが言ったら、それは別のスレッドが書き変えてるかもしれないの!って注意してやるんだったか
580:デフォルトの名無しさん
10/06/17 13:52:45
C言語のvolatileが想定してたのはSignalなどのCPU割り込み処理で、
スレッドのことは考えてなかった。
よくvolatileをスレッドで使うなというのはこのため。
C#やJavaのようなはじめからスレッドを想定してる言語では意味を拡張していて、
スレッドに対して使えるようになっている。
>>553の他の記事を見たが他のはエラーが起きたときのダイアログやメッセージを
イメージでアップしているが、この記事にはない。
おそらく手元の環境でエラーが起きなくて脳内で書いてるんじゃないのかな。
誰かこのプログラムでAssertが起きた人いる?
581:デフォルトの名無しさん
10/06/17 15:29:45
並列化で思い出したが、SIMD対応ってもうやる気無いのかね?
昔はJITの利点の一つとして喧伝してたもんだったが
582:デフォルトの名無しさん
10/06/17 16:05:48
環境に応じてスカラでXMMレジスタを使ってるらしい。
ベクトル化はMono.Simdのようなやり方しかないのだろうか。
583:デフォルトの名無しさん
10/06/17 17:01:13
Matrixとか折角あるのに対応してないのかね
つーかアレDirectX由来だっけ?
584:デフォルトの名無しさん
10/06/17 17:06:53
もともとMatrixはJpegやMpegの展開のために用意されたんじゃなかったっけ?
これからはマルチメディアの時代だとか言って。
今はビデオの展開はGPUの仕事になっちゃってるからCPUのMatrixはあんまり使ってないような。
585:デフォルトの名無しさん
10/06/17 17:27:28
Matrixの主な用途はTransformだと思ってた俺
586:デフォルトの名無しさん
10/06/17 17:53:49
>>585
君が正しい
587:デフォルトの名無しさん
10/06/17 19:44:11
var hoge = new hogehoge()
「新人がわかんないだろ、意地悪すんなよ」って言われた
588:デフォルトの名無しさん
10/06/17 19:56:13
新人いじめかよ
最低だな
589:デフォルトの名無しさん
10/06/17 20:02:15
volatileはメモリの読み書きを最適化して消さないだけ
それ以外は特に何も保証しない
590:デフォルトの名無しさん
10/06/17 20:07:59
>>578
ここはでたらめ言うだらけだな。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(www.microsoft.com)
>>574
URLリンク(www.microsoft.com)
この辺読みゃ分かるが、よく誤解されてるように読み込みそのものが削除されるようなことは普通はない。
591:デフォルトの名無しさん
10/06/17 20:08:57
ぜんぜん前の書き込みを読まない奴だな。それはCの話だ。
592:デフォルトの名無しさん
10/06/17 20:11:32
>>589
そろそろ痛いから言語仕様でも読んでみな。
>>590の最初のリンクだけでも十分だ。
>>580
>>553のソースでしっかりAsser起こる。
一瞬なんで?って思ったが、まあよく考えてみれば確かに起こってもおかしくはないのかな…って感じ。
593:デフォルトの名無しさん
10/06/17 20:16:33
なんかごっちゃになっている奴がいるようだけど、volatile保証するが読み書きの順序と、
複数のスレッドが変数にアクセスする順序は別の問題だから。
594:デフォルトの名無しさん
10/06/17 20:19:05
>>593
未だに>>553の意味わかってないだろ。
595:デフォルトの名無しさん
10/06/17 20:20:35
いや、微妙だな、わかっていっているようにも読める。
596:デフォルトの名無しさん
10/06/17 20:22:20
C#の話だったのか
597:デフォルトの名無しさん
10/06/17 20:23:49
スレタイ読んでなかったのか
598:デフォルトの名無しさん
10/06/17 20:24:10
>>590
遠まわしな説明でよく解らんな。
メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。
599:デフォルトの名無しさん
10/06/17 20:28:07
というか、>>553の例はコンパイラが無意味に見える命令を削除しているだけじゃないのか?
600:デフォルトの名無しさん
10/06/17 20:28:59
はい?
601:デフォルトの名無しさん
10/06/17 20:30:50
volatileは最適化をなくし削除しなくなるんじゃなかったのかよw
602:デフォルトの名無しさん
10/06/17 20:32:08
こんな風に分かってるつもりのやつがでたらめなことばっかり言うから、
危なくて使えないんだよ。
603:デフォルトの名無しさん
10/06/17 20:36:47
>>598
>メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。
メモリバリアの機能を含んでるならなんで>>553はAssert起こって、
明示的にメモリバリア命令入れたら起こらなくなるの?
って思うわな普通。
メモリバリアって言っても一言で言えるほど単純な話じゃない。
604:デフォルトの名無しさん
10/06/17 20:42:36
volatile は確かに最適化を抑止するんだが、それは一つのスレッド内で変数の参照順を
変更するようなものに限られるんだよ。
605:デフォルトの名無しさん
10/06/17 20:58:58
10.4.3 Volatile フィールド
他のスレッドによる volatile 書き込みは、それらが実行された順にすべてのスレッドで行われます。
606:デフォルトの名無しさん
10/06/17 21:38:57
趣味でしかプログラミングをしない俺にはサッパリだ。
607:デフォルトの名無しさん
10/06/17 21:54:02
まあ、そこの原文の
These restrictions ensure that all threads will observe volatile writes performed by any other thread in the order in which they were performed.
A conforming implementation is not required to provide a single total ordering of volatile writes as seen from all threads of execution.
2行目の全順序は要求されないってのが結局>>533の理由なのかな。
608:デフォルトの名無しさん
10/06/17 21:55:08
>>553だったorz
609:デフォルトの名無しさん
10/06/17 21:58:07
>全順序は要求されない
「単一」の全順序は要求されない
が重要か。
610:デフォルトの名無しさん
10/06/17 22:00:41
特定のスレッドを特定のCPUコアで動かすのってどうやるんだっけ?
611:デフォルトの名無しさん
10/06/17 22:07:31
そんなこと考えてる前にlockしちゃうなぁ。
var obj = new Object();
としといて
lock (obj) { s_x = 1; s_ya = s_y; }
と
lock (obj) { s_y = 1; s_xa = s_x; }
で、俺的には万事解決。
色々深遠な問題もあるだろうけど、そんなこと知ったこっちゃねー♪
612:デフォルトの名無しさん
10/06/17 22:18:21
まあそもそもこんな処理は普通は出てこないからなー。
これはあくまで予想と異なる結果になることがあるのを示しているだけで。
ただ、こういうコードを、無意識のうちに、動作を無意識に期待して書いてしまう可能性はあるかもしれない。
まあ普通はマルチスレッドで何かを書く場合は常に同期のタイミングは考慮しながら書くから、
多分めったなことはないとは思うけどね。
613:デフォルトの名無しさん
10/06/17 22:24:25
でもいるんだよ。
既存の処理をなんにも考えずにマルチスレッドにしちゃうのが・・・
614:デフォルトの名無しさん
10/06/17 22:52:56
>>604
参照順は変更されるんじゃないの?
volatile読み込みは他の読み込みよりも早く行われるんでしょ?
615:デフォルトの名無しさん
10/06/17 22:56:00
>>614
まあね。orz
616:デフォルトの名無しさん
10/06/17 23:00:46
>>614
変更されないよ。
>volatile読み込みは他の読み込みよりも早く行われるんでしょ?
そうじゃない。
volatile読み取りよりも後ろにある読み取りが、
volatile読み取りよりも前に移動されるような最適化は行われない
ってこと。
617:デフォルトの名無しさん
10/06/17 23:07:25
>>616
あぁー、そう読むのかぁ。
もっと精進します。
618:デフォルトの名無しさん
10/06/17 23:10:04
そもそもvolatileの順序保障をどういう風に使うかというと、
例えば
int data1;
int data2;
volatile bool completed;
みたいな変数定義を行って、
スレッドAで、
data1 = 1
data2 = 2
completed = true;
みたいなことをして、
スレッドBで、
if (completed)
{
//data1とdata2を読み取り
}
みたいにしたとき、data1とdata2の読み取りで、
確実にスレッドAで更新された結果にアクセスできる。
これは、
volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われることが保証されてるから。
619:デフォルトの名無しさん
10/06/17 23:12:58
もしこの保証がないと、スレッドBでの読み取りで、
data1とdata2が、スレッドAが書き込んだ結果であることを保証できない。
620:デフォルトの名無しさん
10/06/17 23:14:24
>>618
> volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
> volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われる
リンク先にも確かにかいてあるけれど、これに当てはまらないものはすべて保障されていないと考えるべきなのかな。
volatile書き込みより後ろの書き込みが、volatile書き込みより前に行われる可能性とかそういうの。
621:デフォルトの名無しさん
10/06/17 23:24:01
C#の言語仕様では保証されてないはず。
ECMAのCLIのメモリモデルでも、
・読み取りと書き込みは、volatile の読み取り前に移動することができない。
・読み取りと書き込みは、volatile の書き込み後に移動することができない。
というルールしかないので保証されない。
ただし、CLR2.0のメモリモデルではもう少し保証が強い。
詳しくは
URLリンク(www.microsoft.com)
なんだけど、分かりにくいなw
少なくとも書き込み順序は変更されないはず。
なぜなら、CLR2.0では実質書き込みは全て「解放形式」になっているらしいので。
622:デフォルトの名無しさん
10/06/17 23:26:36
おっと、そこのリンクの
4.書き込みは、同一スレッドからの別の書き込みを超えて移動することができない。
があるので、書き込み順序はたとえvolatileでなくとも、変更されることはないな。
623:デフォルトの名無しさん
10/06/17 23:42:25
順序がどうとか、なんでそういう話になるのか意味がわからんよ。
volatileの意味は文字通りその変数を非同期的に変更されうるものとして
扱うという意味以上でも以下でもないはずだと思うんだけど....
624:デフォルトの名無しさん
10/06/17 23:48:23
>>623
俺もそれだけの意味だと思っていたんだけど、C#では違うということを恥ずかしながら今日知りました。
625:デフォルトの名無しさん
10/06/17 23:52:24
なんだよ、結局またわかってないヤツが暴れてただけかよw
626:デフォルトの名無しさん
10/06/18 00:02:39
俺は暴れてはいないつもりなので、他にも分かってない人がいたのでしょう。
627:デフォルトの名無しさん
10/06/18 00:04:30
>>626
お前だろ
628:デフォルトの名無しさん
10/06/18 00:08:54
俺のようなヘボプログラマにとっての結論は、
マルチスレッドではvolatileに頼るなということだな。
629:デフォルトの名無しさん
10/06/18 00:08:57
そんな、高速だけど分かってる奴でもとっちらかって間違いかねない仕掛けで書くより、
遅くても排他処理でガチガチ泥臭く書いたほうがメンテナンスとか考えると現実的じゃね?
忘れた頃に見直す度に一々頭の中で再検証すんのかよ、って話。
630:デフォルトの名無しさん
10/06/18 00:10:43
だね。メモリバリアメソッドも用がなさそうだし、当面lockステートメントでいいやって思った。
ちゃんと理解できたら正しく速く動作するライブラリを書きたいものです。
631:デフォルトの名無しさん
10/06/18 00:13:12
>>627
なんだ、暴れたのがいまさら恥ずかしくなったか?
632:デフォルトの名無しさん
10/06/18 01:05:25
>>623
こいつがどこまでもバカなだけ。
633:デフォルトの名無しさん
10/06/18 01:07:47
>>630
基本的には正しい判断だと思うよ。
lockだって別にそんなに重いわけじゃない(状況によるが)。
634:デフォルトの名無しさん
10/06/18 01:09:53
>>623
言語仕様からMSDNマガジンの詳細な記事から
何から何まで何度も示されてるのに意味が分からないなら
お前は本当に頭が悪いんだろう。
635:デフォルトの名無しさん
10/06/18 01:57:39
>>553のって
s_x = 1;
s_ya = s_y;
の部分について、s_yの読み取りが先に行われて、
s_xの書き込み、s_yaの書き込みが行われたってことになるの?
636:デフォルトの名無しさん
10/06/18 05:13:58
どうなの?
637:デフォルトの名無しさん
10/06/18 06:28:32
>>629
鉄板でしょう。
638:デフォルトの名無しさん
10/06/18 08:58:25
C#の言語仕様のダウンロードURI教えてください。
639:デフォルトの名無しさん
10/06/18 09:10:49
VS2010のフォルダ内にありましたorz
640:デフォルトの名無しさん
10/06/18 09:58:10
object[] a = string[]{"a"};
string[] b = a as string[];
この処理は純粋にaへの代入とbへのキャストが行われているだけで、
List<object>とList<string>を型変換するときのようなインスタンス
の新規作成はされないと考えてよいのでしょうか?
641:デフォルトの名無しさん
10/06/18 13:53:30
ちょっとした疑問
class A {
object lockobj = new object;
string _a;
public a {
get {
lock(lockobj){
return _a;
}
}
set {
lock(lockobj){
_a = value;
}
}
}
これって、ちゃんとロック掛かるんだろうか?
642:デフォルトの名無しさん
10/06/18 13:54:34
て
643:デフォルトの名無しさん
10/06/18 13:56:56
>>641
はい
644:デフォルトの名無しさん
10/06/18 15:16:12
>>641
いいえ、コンパイルすらできません
645:デフォルトの名無しさん
10/06/18 15:25:20
>>635ってどうなの?
なんで頭いい人たちみんなスルーなの
646:デフォルトの名無しさん
10/06/18 15:31:28
OoOについてggrks
647:デフォルトの名無しさん
10/06/18 16:28:23
>>644
型がないからってか?
質問の意図はそうじゃないだろ・・・
648:デフォルトの名無しさん
10/06/18 17:16:46
>>641
質問のポイントはLockのスコープからのreturnだろ?
ロックはreturnステートメントの実行直後にはずれるから普通に使える。
649:デフォルトの名無しさん
10/06/18 18:46:23
>>635
>>553の件少し判った気がする。
環境依存があるようだからここにいる人たちも確認してもらえると助かる。
Releaseモードでも確認できるように修正。コンソールに出力させるようにする。
>Debug.Assert(s_xa == 1 || s_ya == 1);
if (!(s_xa == 1 || s_ya == 1)) Console.WriteLine("* {0}, {1}", s_xa, s_ya);
こちらの環境で確認できたこと。
マルチCPU、マルチコア、ハイパースレッディングでも起きる。
シングルCPU環境では起きない。
Relaseビルド、Debugビルドはどちらでも良い。
Debug実行時に起きる。Debugなしで実行では起きない。
結論
予想が当たってればOoOとか高尚な問題でなく、IDEのデバッガのバグの可能性がある。
650:デフォルトの名無しさん
10/06/18 19:06:46
>>646
すっこんでろ
651:デフォルトの名無しさん
10/06/18 20:41:20
>>649
俺の環境では、デバッグなし実行でも起こってる。
652:デフォルトの名無しさん
10/06/18 20:43:41
>>641
ちゃんとロックかかるってのはどういう意味で言ってる?
ロック自体はもちろん期待通り普通にかかるが、
objA.A =
objA.A + "hoge";
なんてのをアトミックに実行することは当然ながらできない。
653:デフォルトの名無しさん
10/06/18 20:44:30
改行入った…
objA.A = objA.A + "hoge";
な。
654:デフォルトの名無しさん
10/06/18 21:15:29
>>618
なんか違わないか?
その例だと、スレッドBでdata1,data2が「正しく」読める保証は何もないのでは?
でなきゃ、そもそもvolatileって何だって話になる。
655:デフォルトの名無しさん
10/06/18 21:26:12
>>654
>でなきゃ、そもそもvolatileって何だって話になる。
どういう意味??
何言ってるのかわからない。
そりゃまあ>>618には実際にはいろいろ前提があるのは確かだが、
文脈で言いたい事柄の意図は通じると思うが。
656:デフォルトの名無しさん
10/06/18 21:29:24
>>654の指摘が何を言おうとしてるのかわからないので、そうだな、
>その例だと、スレッドBでdata1,data2が「正しく」読める保証は何もないのでは?
なぜ保証がないのかを具体的に書けばそちらの意図はわかるかもしれん。
657:デフォルトの名無しさん
10/06/18 21:33:09
無意味な実装検証してもしょうがないような
658:デフォルトの名無しさん
10/06/18 21:35:39
>>656
そもそもその保証がない(コンパイラの最適化によって変数そのものには
アクセスしない可能性がある)から、そういう可能性を排除するためのvolatileの
はずなんだけど....
どうもこのスレ、分かってるのか分かってないのかよく分からん人が多いよな
659:デフォルトの名無しさん
10/06/18 21:38:32
volatileの使い方?を勘違いしてる
660:デフォルトの名無しさん
10/06/18 21:42:04
ひょっとして>>590の後半に書いてるような、よくある誤解をしてるクチかな?
661:デフォルトの名無しさん
10/06/18 21:43:49
よくある誤解、ねえ....
662:デフォルトの名無しさん
10/06/18 21:44:48
>>658
それがよくある誤解。そんなことは起こらない。
何度も何度も何度も出してるけど
URLリンク(www.microsoft.com)
でも読んでみ。
※今はC#のvolatileの話だぜ
663:デフォルトの名無しさん
10/06/18 21:49:59
volatileの意味を誤読してるとか
664:デフォルトの名無しさん
10/06/18 21:51:18
>>658
メモリモデルの意味を全く理解してないな。
だったら、例えばもしlockで排他制御してた場合に、
他スレッドで更新した変数をlock内できちんと読めるのはなぜか考えてみな。
最適化で削除されるならそれすら保証されなくなる。
lock内では削除したらダメってコンパイラにはわかってるだろとか考えなしなこと言うなよ。
lock内から呼び出される普通のメソッドだってあるんだからな。
コンパイル時にそこがlock内かどうかなんて判断は無意味なこと。
665:デフォルトの名無しさん
10/06/18 21:53:01
>>662
だからvolatileの話じゃないし。
その参照先のどこにも「C#ではキャッシュを読む最適化は行われない」
とは書いてないように思うが。
666:デフォルトの名無しさん
10/06/18 21:58:40
メモリモデルのルールをよく読め。
------
読み取りが、同一スレッドから同一ロケーションに対する別の読み取りに隣接している場合、その読み取りは削除のみ可能。
書き込みが、同一スレッドから同一ロケーションに対する別の書き込みに隣接している場合、その書き込みは削除のみ可能。
規則 5 により、複数の読み取りまたは書き込みを隣接させてから、本規則を適用することが可能です。
------
667:デフォルトの名無しさん
10/06/18 22:01:01
>その参照先のどこにも「C#ではキャッシュを読む最適化は行われない」
>とは書いてないように思うが。
あのな、volatile読み取りより後の読み取りは必ずvolatile読み取りより後で実行されるってのは、
CPUのキャッシュ制御を含んだ話だよ。
>>618
ではvolatile読み取りの後に変数にアクセスしてるだろうが。
だから必ずキャッシュではなく(別スレッドで更新された)最新の値が読み取られる。
っていうかそのためのvolatileだって話。
668:デフォルトの名無しさん
10/06/18 22:02:41
どれとも
>その参照先のどこにも「C#ではキャッシュを読む最適化は行われない」
>とは書いてないように思うが。
これはCPUキャッシュじゃなくて、レジスタにキャッシュするとか、そういう意味で書いてるのか?
それなら、それこそ>>666の話だ。
隣接する同一ロケーションからの読み取り以外で、読み取りが最適化によって削除されることはない。
669:デフォルトの名無しさん
10/06/18 22:10:40
>>666
「ケースAの場合、readのみが削除可能」という文章は、
「readが削除されるのはケースAの場合のみである」という意味ではない。
大丈夫?
>>667
どう読んでも君が思ってるような意味には解釈できないと思うが...
「処理Aと処理Bはシーケンシャルに実行されます」の意味は、
処理Aに続いて行われる処理Bに対して最適化が行われない、などということを意味しない。
670:デフォルトの名無しさん
10/06/18 23:40:03
ふえ?
671:デフォルトの名無しさん
10/06/19 00:00:00
>「ケースAの場合、readのみが削除可能」という文章は、
>「readが削除されるのはケースAの場合のみである」という意味ではない。
>大丈夫?
あほくさいこと言う前にそのページ全体をよく読んでみろよ。
メモリモデルをどのように定義してるか書いてあるから。
「メモリ モデルは、順次一貫性モデル (最も制限的かつ厳密なモデル) をベースとし、」ってとこらへんな。
だいたいそんなこと言ったら書いてないことだらけなんだから、そういう読み方じゃおかしいことくらいわかろうに。
>「処理Aと処理Bはシーケンシャルに実行されます」の意味は、
>処理Aに続いて行われる処理Bに対して最適化が行われない、などということを意味しない。
どこの記述のことを言ってるのかわからんがな、処理Bの最適かって具体的に何のことを言ってる?
読み取りの最適化なら、前に読んだ値をキャッシュしておくくらいしかないだろ。
メモリモデルでは、そういうのを読み取りを前に移動するという風に定義してるんだよ、上のページにちゃんと書いてある。
そして読み取りはvolatile読み取りより前に移動できない、
つまり、volatile読み取りより前に読み取りをキャッシュしておくという最適化は許されない。
全部書いてある。
672:デフォルトの名無しさん
10/06/19 00:04:49
もういちいち説明するのめんどくさい、勝手に自分流解釈しとけ。
メモリモデルのこととかある程度わかってる人間ならすぐに理解できる話だ。
volatile絡みのルールの話も、マルチスレッドでのメモリモデルの一般的な話を理解してるなら
はっきり言って常識レベルの話(ごくごく一般的なルール、javaのメモリモデルも同じようなルール)。
一回マルチスレッドのメモリモデルや順序について詳しく調べてみ。
673:デフォルトの名無しさん
10/06/19 00:17:33
>>658
お前が分かってないことははっきりしてる。
674:デフォルトの名無しさん
10/06/19 00:27:55
>>658
>そもそもその保証がない(コンパイラの最適化によって変数そのものには
>アクセスしない可能性がある)から、そういう可能性を排除するためのvolatileの
>はずなんだけど....
URLリンク(msdn.microsoft.com)
Cとかの感覚で言ってるのかもしれないが、今どきのマルチスレッドを前提とした
havaやC#のような言語では、そう簡単にアクセスそのものが消されることはないよ。
マルチスレッドで正常な動作を保証するために(保証するようなコーディングができるようにするために)、
メモリモデルというものを定義して、そのルール内で最適化を行うようになってる。
だからlockやvolatileなどをルールに従って使用して、正常に動作することが保証できるコーディングを行える。