「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part134
http://mevius.5ch.net/test/read.cgi/tech/1511951038/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part135
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (ワッチョイ 8b75-uWnk)
2018/02/04(日) 22:02:28.59ID:FbKpa1HN0877デフォルトの名無しさん (ワッチョイ 1606-x4Or)
2018/02/28(水) 23:59:37.37ID:z3mkUJ010 アセンブラは何とか成るけど、そのまま16進数打っていた奴には敵わんかったわw
いくら8ビットで命令少ないからって常人が出来るものじゃない
いくら8ビットで命令少ないからって常人が出来るものじゃない
878デフォルトの名無しさん (ワッチョイ 0706-lEE9)
2018/03/01(木) 02:02:49.70ID:kBOyQt430879デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/01(木) 04:04:04.41ID:3FYR9rwV0 >>877
こういう話で 8086 のバイトコードを丸暗記していたという話はきいたことがないね
こういう話で 8086 のバイトコードを丸暗記していたという話はきいたことがないね
881デフォルトの名無しさん (ワッチョイ 4706-m1UI)
2018/03/01(木) 08:22:59.92ID:8YSrTbQO0882デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/01(木) 10:14:54.05ID:3FYR9rwV0 8進数で覚えれば何とかなるけどね
883デフォルトの名無しさん (ワッチョイ 6775-LhZF)
2018/03/01(木) 13:33:07.63ID:6vJouTff0 スレチ
884デフォルトの名無しさん (スップ Sd7f-8Tjf)
2018/03/01(木) 16:02:04.47ID:nTTdbTAFd885デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 19:58:55.12ID:AzZlAoZA0 te
886デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 20:03:50.95ID:AzZlAoZA0 Task taskA = Task.Run(async () => {
int count = 60;//6sec
while (count-- > 0) {
Debug.Print("sw0:" + sw.ElapsedMilliseconds.ToString());
await Task.Delay(100);
Debug.Print("sw1:" + sw.ElapsedMilliseconds.ToString());
}
} );
taskA.Wait(5000);
5秒で一旦止まるように見えるが、暫くするとまたタスクは回り始める。C#バグかよ。
int count = 60;//6sec
while (count-- > 0) {
Debug.Print("sw0:" + sw.ElapsedMilliseconds.ToString());
await Task.Delay(100);
Debug.Print("sw1:" + sw.ElapsedMilliseconds.ToString());
}
} );
taskA.Wait(5000);
5秒で一旦止まるように見えるが、暫くするとまたタスクは回り始める。C#バグかよ。
887デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 20:10:43.58ID:AzZlAoZA0 しかもUIは5秒間止まってしまう。TASKの意味ないよ。書き方を間違ってるんだろうか?
888デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 20:23:11.20ID:q/FX+WiY0 親スレが先に終わってるだけでは?
889デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 20:33:24.41ID:q/FX+WiY0 ちなみUIを止めたくなければtaskAをawaitすれば良いはず
890デフォルトの名無しさん (ワッチョイ df06-k3ZN)
2018/03/01(木) 20:34:30.22ID:quAhlzft0 >>886-887
何だか良く分からないけど、どうみても6秒以上掛かるコードだし
Wait()はタイムアウトしても終了させないし、待機時間ブロックする
UIスレッドでしたら固まるし、awaitは解放したいスレッドで使う物だよ
何だか良く分からないけど、どうみても6秒以上掛かるコードだし
Wait()はタイムアウトしても終了させないし、待機時間ブロックする
UIスレッドでしたら固まるし、awaitは解放したいスレッドで使う物だよ
891デフォルトの名無しさん (ブーイモ MM4b-k3ZN)
2018/03/01(木) 20:36:05.85ID:6F6TcS9xM892デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 20:37:12.88ID:AzZlAoZA0893デフォルトの名無しさん (ブーイモ MM4b-k3ZN)
2018/03/01(木) 20:39:22.48ID:6F6TcS9xM >>892
それは正しい動作だよ
それは正しい動作だよ
894デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 20:41:57.81ID:q/FX+WiY0 次はasync voidで定義してなくてエラーになる質問が来ると見た
895デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 20:44:04.03ID:AzZlAoZA0 >>891
サンプル見て書いたつもりだったが、間違いでしたか?
Asyncが非同期処理を宣言するような機能で、Awaitは解放するスレッドに付けるのだから、Task.Delay(100)を
解放してUIに戻す.つまり100msec待ちながらもUIに制御を戻すってことではないのか?
サンプル見て書いたつもりだったが、間違いでしたか?
Asyncが非同期処理を宣言するような機能で、Awaitは解放するスレッドに付けるのだから、Task.Delay(100)を
解放してUIに戻す.つまり100msec待ちながらもUIに制御を戻すってことではないのか?
896デフォルトの名無しさん (ブーイモ MM4b-k3ZN)
2018/03/01(木) 20:44:33.47ID:6F6TcS9xM >>895
思い違い
思い違い
897デフォルトの名無しさん (ワッチョイ e796-EQhT)
2018/03/01(木) 20:47:14.71ID:CGoXJwt80 こんなサンプルどこにあったんだよ
冗談キツいぞ
冗談キツいぞ
898デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 20:50:53.25ID:q/FX+WiY0899デフォルトの名無しさん (ワッチョイ df06-k3ZN)
2018/03/01(木) 20:52:01.74ID:quAhlzft0 >>895
Taskはスケジューラを指定しない限りワーカースレッドで動くよ
その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする
Taskはスケジューラを指定しない限りワーカースレッドで動くよ
その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする
900デフォルトの名無しさん (ワッチョイ 7fc9-m1UI)
2018/03/01(木) 20:54:52.06ID:nTP7Re4I0 await/asyncはネットに碌な例がないからしゃーないわな
901デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/01(木) 20:59:11.45ID:73H1EZrda 間違った理解
awaitがあるとUIに制御を戻す
awaitがあるメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい
awaitがあるとUIに制御を戻す
awaitがあるメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい
902デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 20:59:14.26ID:AzZlAoZA0 >WaitでGUIのスレッドを使って待機してるのでGUIはその間動かない
>5秒たつと待つのをやめてそのまま進む
GUIのスレッドを使って待つの当然でしょ。それが目的だから。だめなの?
じゃあどこで待てばいいのだ?
void ボタン_Click(){
TaskAを実行(起動);
TaskAの完了を待();
}
処理の流れはこうだけど、これは駄目ってこと? じゃあどうするの?
void ボタン_Click(){
TaskAを実行(起動);
}
どっか別のところで、例えばタイマー割り込みで
TaskAの完了を待();
ってことか? 流れがわかり難いので不細工だよな。「シーケンシャルに流れを書いて且つUIが
止まらない」というようになってないと駄目だろ。
>5秒たつと待つのをやめてそのまま進む
GUIのスレッドを使って待つの当然でしょ。それが目的だから。だめなの?
じゃあどこで待てばいいのだ?
void ボタン_Click(){
TaskAを実行(起動);
TaskAの完了を待();
}
処理の流れはこうだけど、これは駄目ってこと? じゃあどうするの?
void ボタン_Click(){
TaskAを実行(起動);
}
どっか別のところで、例えばタイマー割り込みで
TaskAの完了を待();
ってことか? 流れがわかり難いので不細工だよな。「シーケンシャルに流れを書いて且つUIが
止まらない」というようになってないと駄目だろ。
903デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/01(木) 21:00:06.29ID:73H1EZrda ちょっと語弊があるな
間違った理解
awaitがあるとUIに制御を戻す
awaitがついたメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい
間違った理解
awaitがあるとUIに制御を戻す
awaitがついたメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい
904デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/01(木) 21:00:51.42ID:73H1EZrda905デフォルトの名無しさん (ブーイモ MM4b-k3ZN)
2018/03/01(木) 21:05:15.82ID:6F6TcS9xM906デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 21:06:34.94ID:q/FX+WiY0 winformsで非同期やってた時、デバッグとリリースで動作が違くてはまったなぁ
CheckForIllegalCrossThreadCallsは絶対に許さない
CheckForIllegalCrossThreadCallsは絶対に許さない
907デフォルトの名無しさん (ワッチョイ e796-EQhT)
2018/03/01(木) 21:06:49.07ID:CGoXJwt80 ああ前にもいた奴?もう辞めればいいのに
908デフォルトの名無しさん (ブーイモ MM4b-k3ZN)
2018/03/01(木) 21:09:05.97ID:6F6TcS9xM >>906
確かそれ挙動は同じなんだけどデバッグ時はIDEかなにかにスレッド渡す奴だっけ?
確かそれ挙動は同じなんだけどデバッグ時はIDEかなにかにスレッド渡す奴だっけ?
909デフォルトの名無しさん (ワッチョイ df06-k3ZN)
2018/03/01(木) 21:18:31.12ID:quAhlzft0 >>902
いやだから…そのWait()の代わりにawaitをUIメソッドに書くんでしょうが…
そうすれば一旦スレッド制御を返し、Taskが終われば取り戻し再開してくれる
レガシーな書き方だってTaskScheduler.FromCurrentSynchronizationContext()を指定して
ContinueWith()すれば良いし、UIコンテキスト取得しといてワーカースレッドから投げても良い
いやだから…そのWait()の代わりにawaitをUIメソッドに書くんでしょうが…
そうすれば一旦スレッド制御を返し、Taskが終われば取り戻し再開してくれる
レガシーな書き方だってTaskScheduler.FromCurrentSynchronizationContext()を指定して
ContinueWith()すれば良いし、UIコンテキスト取得しといてワーカースレッドから投げても良い
910デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 21:20:57.83ID:q/FX+WiY0911デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 21:23:58.40ID:AzZlAoZA0 >Taskはスケジューラを指定しない限りワーカースレッドで動くよ
>その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
>UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする
言ってることの意味がわからない。Async()=>{}にしてるでしょ。
しかもこのラムダはRunが確保したスレッドプールで動作してるんでしょ。意味的にそうでないと
可笑しい。でラムダのその中でawaitしてるんだから、、、、って
UIスレでボタン受付
スレ4000でラムダ起動
AWAITでスレ4001にスイッチして100msec待つ
100msec完了でスレ4000に戻る。
スレ4000でループ
Task.Wait(3000)はUIスレでスレ4000の終了を待ってる。
ここで待ってる限りUIは止まるってことね。
そういう意味か? 何となく解った。
>その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
>UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする
言ってることの意味がわからない。Async()=>{}にしてるでしょ。
しかもこのラムダはRunが確保したスレッドプールで動作してるんでしょ。意味的にそうでないと
可笑しい。でラムダのその中でawaitしてるんだから、、、、って
UIスレでボタン受付
スレ4000でラムダ起動
AWAITでスレ4001にスイッチして100msec待つ
100msec完了でスレ4000に戻る。
スレ4000でループ
Task.Wait(3000)はUIスレでスレ4000の終了を待ってる。
ここで待ってる限りUIは止まるってことね。
そういう意味か? 何となく解った。
912デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 21:25:07.02ID:q/FX+WiY0 まぁ別スレからUI触るなクソ野郎と言われればその通りなので、当時の俺が悪かったのは間違いないのだが。
913デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/01(木) 21:26:35.19ID:AzZlAoZA0 >いやだから…そのWait()の代わりにawaitをUIメソッドに書くんでしょうが…
そういうことね。解り申した。
そういうことね。解り申した。
914デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 21:41:01.61ID:q/FX+WiY0 ちなみに非同期の勉強ならasync/awaitよりも
生threadから始めた方が良いと思うんですが?
生threadから始めた方が良いと思うんですが?
915デフォルトの名無しさん (ワッチョイ dfd2-QDoW)
2018/03/01(木) 21:46:31.27ID:GOUhL4CG0 >>914
ねーよ
ねーよ
916デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/01(木) 21:48:56.53ID:q/FX+WiY0 そっかあ(´・ω・`)
917デフォルトの名無しさん (ワッチョイ 07e3-Dwo1)
2018/03/01(木) 21:54:11.39ID:CjtoGQ7P0 あんまり実践で使うことないな
基本的にスレッド必要なときってメソッド内で終わるほど準備ヌルくないし
簡単な機能使って実装すると大抵バグってる
基本的にスレッド必要なときってメソッド内で終わるほど準備ヌルくないし
簡単な機能使って実装すると大抵バグってる
918デフォルトの名無しさん (ワッチョイ 4706-m1UI)
2018/03/01(木) 22:41:00.53ID:8YSrTbQO0 ま非同期など定形を何本か覚えたら、ソレ以上凝ったことしても大して効率上がらんのよね
919デフォルトの名無しさん (ワッチョイ 0706-lEE9)
2018/03/01(木) 23:40:54.75ID:kBOyQt430 たまにはBackgroundWorkerさんのことも・・・
ううん、忘れていいw
ううん、忘れていいw
920デフォルトの名無しさん (アウアウウー Sa2b-dKqy)
2018/03/01(木) 23:57:01.48ID:bUfJPuYla クライアントアプリならイベントハンドラでの await Task.Run だけ覚えてそこから先は全部同期でいい
WebだとTPL Dataflowとか CancellationToken とかまで踏み込んで使いこなさないとあまり意味ないけど
WebだとTPL Dataflowとか CancellationToken とかまで踏み込んで使いこなさないとあまり意味ないけど
921デフォルトの名無しさん (ワッチョイ 7fc9-m1UI)
2018/03/02(金) 00:00:26.72ID:Gwpj8bix0922デフォルトの名無しさん (アウアウウー Sa2b-dKqy)
2018/03/02(金) 00:15:37.45ID:SqtcRaFRa >>921
そもそも勘違いしてるみたいだが、asyncはオーバーヘッドが大きいから一般にはなるべく使わないほうがいい。
じゃあWebではなぜ逆に非同期を全面的に積極的に使うかというと、
多数のリクエストを同時に処理するときのスレッドプールの消費を抑えることでメモリ使用量を低減できるから。
クライアントアプリなんか必ず同時に一人しか使わないんだから、UIのイベントの度にRunしても全く問題にならない。
そもそも勘違いしてるみたいだが、asyncはオーバーヘッドが大きいから一般にはなるべく使わないほうがいい。
じゃあWebではなぜ逆に非同期を全面的に積極的に使うかというと、
多数のリクエストを同時に処理するときのスレッドプールの消費を抑えることでメモリ使用量を低減できるから。
クライアントアプリなんか必ず同時に一人しか使わないんだから、UIのイベントの度にRunしても全く問題にならない。
923デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/02(金) 00:17:51.82ID:glQGbmO9a それは独自研究の独自理論でしかないだろう
924デフォルトの名無しさん (アウアウウー Sa2b-dKqy)
2018/03/02(金) 00:21:16.16ID:SqtcRaFRa925デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/02(金) 00:23:34.25ID:glQGbmO9a >asyncはオーバーヘッドが大きいから一般にはなるべく使わないほうがいい。
これが独自研究の独自理論
これが独自研究の独自理論
926デフォルトの名無しさん (ブーイモ MMcf-dKqy)
2018/03/02(金) 00:27:57.99ID:RRk6A7H1M927デフォルトの名無しさん (ワッチョイ 47cc-MIKN)
2018/03/02(金) 00:29:15.66ID:k6O24zwX0 個人的には非同期IOのシナリオの場合ならクライアントでも積極的に非同期使うようにしてるにゃ
928デフォルトの名無しさん (アウアウウー Sa2b-k3ZN)
2018/03/02(金) 00:31:40.92ID:glQGbmO9a 普通はそうだろ
929デフォルトの名無しさん (ワッチョイ 07e3-Dwo1)
2018/03/02(金) 00:32:45.87ID:ORIKCzBj0 そもそもなぜ非同期なんかにしたいのか?
すっげー不具合増えそうだしぶっちゃけやるんじゃねーよ
ぶっころ
すっげー不具合増えそうだしぶっちゃけやるんじゃねーよ
ぶっころ
930デフォルトの名無しさん (ワッチョイ ff7f-9act)
2018/03/02(金) 00:36:23.51ID:biZ1zUn80 >>926
> 結論 – 非常に短いメソッドにasync/awaitを使うことを避ける、あるいはきついループ内でawaitステートメントを持つことをを避ける
使い所を間違えるなとしか書いて無い。
「一般にはなるべく使わないほうがいい」とか、曲解だよ。
> 結論 – 非常に短いメソッドにasync/awaitを使うことを避ける、あるいはきついループ内でawaitステートメントを持つことをを避ける
使い所を間違えるなとしか書いて無い。
「一般にはなるべく使わないほうがいい」とか、曲解だよ。
931デフォルトの名無しさん (アウアウウー Sa2b-dKqy)
2018/03/02(金) 00:39:03.88ID:SqtcRaFRa932デフォルトの名無しさん (ワッチョイ dfd2-QDoW)
2018/03/02(金) 02:39:53.79ID:kefJfyuu0 >>920
クライアントアプリならREST API叩くのもごく一般的だと思うが、それも全部同期でやるのかい?
クライアントアプリならREST API叩くのもごく一般的だと思うが、それも全部同期でやるのかい?
933デフォルトの名無しさん (ブーイモ MMcf-dKqy)
2018/03/02(金) 03:52:57.49ID:QlU5Q+B8M934デフォルトの名無しさん (ワッチョイ dfd2-QDoW)
2018/03/02(金) 04:11:03.94ID:kefJfyuu0 >>933
ねーよwww
ねーよwww
935デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 04:58:14.52ID:IwZ3DIkv0 ?
936デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 05:58:54.00ID:IwZ3DIkv0 var cant = new System.Threading.CancellationTokenSource();//なんじゃこれは?
Task taskA = Task.Run(async () => {
int count = 60;//6sec
while (count-- > 0) {
〜処理
cant.Token.ThrowIfCancellationRequested();//例外発生
}
}, cant.Token );
何じゃらほい? 大したことできんのにたいそうな名前を付けやがって笑える。普通にflg使ったらいいだけだろ。
Task taskA = Task.Run(async () => {
int count = 60;//6sec
while (count-- > 0) {
〜処理
cant.Token.ThrowIfCancellationRequested();//例外発生
}
}, cant.Token );
何じゃらほい? 大したことできんのにたいそうな名前を付けやがって笑える。普通にflg使ったらいいだけだろ。
937デフォルトの名無しさん (ワッチョイ 7f81-EQhT)
2018/03/02(金) 08:09:20.83ID:XunmkkLx0 相変わらずの浅はかさだ
1mmも成長していない
1mmも成長していない
938デフォルトの名無しさん (ブーイモ MMcf-dKqy)
2018/03/02(金) 09:21:22.43ID:QlU5Q+B8M939デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 12:17:26.88ID:IwZ3DIkv0 >>938
すいません。笑えませんでした。
すいません。笑えませんでした。
940デフォルトの名無しさん (スップ Sd7f-MIKN)
2018/03/02(金) 12:27:24.77ID:4zkyzZ2fd ふふってなった
941デフォルトの名無しさん (スッップ Sdff-QDoW)
2018/03/02(金) 12:41:04.31ID:Ej2mk6Y7d >>938
日本語
日本語
942d (ワッチョイ df9d-wl/W)
2018/03/02(金) 13:28:13.40ID:IwZ3DIkv0 これってどういう意味があるの?単純にフラグを叩けばいいだけだろ。大して利点があるようには思えんが?
ManualResetEventの代わりにflg=Flseで初期化しておいて、setのところでflg=trueにして、
while(!flg);で待機したらいいだけではないのか?
var waitHandle = new ManualResetEvent(false);
Task.Run(() => {Thread.Sleep(2000); waitHandle.Set(); });
Console.WriteLine("Wait");
waitHandle.WaitOne(Timeout.Infinite);
ManualResetEventの代わりにflg=Flseで初期化しておいて、setのところでflg=trueにして、
while(!flg);で待機したらいいだけではないのか?
var waitHandle = new ManualResetEvent(false);
Task.Run(() => {Thread.Sleep(2000); waitHandle.Set(); });
Console.WriteLine("Wait");
waitHandle.WaitOne(Timeout.Infinite);
943デフォルトの名無しさん (ワッチョイ df06-k3ZN)
2018/03/02(金) 14:13:57.43ID:rvZjiwte0 >>942
もはやWin32絡むし煩わしいので、ドキュメントでも読んどってください
https://msdn.microsoft.com/library/cc429052
https://docs.microsoft.com/dotnet/standard/threading/manualresetevent-and-manualreseteventslim
もはやWin32絡むし煩わしいので、ドキュメントでも読んどってください
https://msdn.microsoft.com/library/cc429052
https://docs.microsoft.com/dotnet/standard/threading/manualresetevent-and-manualreseteventslim
944デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 15:56:09.38ID:IwZ3DIkv0 100msecのタイマー割り込みの中でこういうのを順番に実行する。
void timer1(){
switch( state){
case 0:
if( do1() ){state++;}; break;
case 1:
if( do2() ){state++}; break;
case 2:
if( do2() ){state=0}; break;
}
}
何かもっとスマートな書き方はないか?
void timer1(){
switch( state){
case 0:
if( do1() ){state++;}; break;
case 1:
if( do2() ){state++}; break;
case 2:
if( do2() ){state=0}; break;
}
}
何かもっとスマートな書き方はないか?
945デフォルトの名無しさん (ワッチョイ dfc3-mqjH)
2018/03/02(金) 16:01:28.48ID:MD67uZj00 デリゲート配列ってのもありますが、賛否両論です。
946デフォルトの名無しさん (ワッチョイ dfc3-mqjH)
2018/03/02(金) 16:10:39.54ID:MD67uZj00 stateがマジックナンバー感があるので、配列よりDictionaryクラスっても、
でも賛否両論です。
でも賛否両論です。
947デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 16:57:54.42ID:IwZ3DIkv0 Stateを使いたくない。
while(1){
while(!do1()){ wait(100);}
while(!do2()){ wait(100);}
while(!do3()){ wait(100);}
}
こんな感じでなんかいい書き方は?
while(1){
while(!do1()){ wait(100);}
while(!do2()){ wait(100);}
while(!do3()){ wait(100);}
}
こんな感じでなんかいい書き方は?
948デフォルトの名無しさん (ワッチョイ 07e3-Dwo1)
2018/03/02(金) 17:11:36.53ID:ORIKCzBj0949デフォルトの名無しさん (オイコラミネオ MM4f-mqjH)
2018/03/02(金) 17:55:24.18ID:z8blm8BJM >>947
doの処理ステップによって遅延がでてこない?
doの処理ステップによって遅延がでてこない?
950デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 18:21:47.40ID:IwZ3DIkv0951デフォルトの名無しさん (アウアウエー Sa9f-OA7j)
2018/03/02(金) 18:26:56.36ID:AXJZJbYfa >>944
ネタっぽい質問だけどこんなのでも作るとか
public class RoundRobin
{
int index = 0;
RoundRobin(params Action[] jobs)
{
if (jobs == null || jobs.Length == 0) jobs = new Action[] { () => { } };
this.Jobs = new ReadOnlyCollection<Action>(jobs);
}
public ReadOnlyCollection<Action> Jobs { get; private set; }
public void DoNext()
{
Jobs[index]();
index = ++index % Jobs.Count;
}
}
余談だけど、組み込みか何かの人?
タイマー割り込みてw
ネタっぽい質問だけどこんなのでも作るとか
public class RoundRobin
{
int index = 0;
RoundRobin(params Action[] jobs)
{
if (jobs == null || jobs.Length == 0) jobs = new Action[] { () => { } };
this.Jobs = new ReadOnlyCollection<Action>(jobs);
}
public ReadOnlyCollection<Action> Jobs { get; private set; }
public void DoNext()
{
Jobs[index]();
index = ++index % Jobs.Count;
}
}
余談だけど、組み込みか何かの人?
タイマー割り込みてw
952デフォルトの名無しさん (ワッチョイ 0783-k3ZN)
2018/03/02(金) 18:30:28.03ID:+QaGy5B+0 どんどんソースが長くなる不思議。タイマー割り込みを馬鹿にしてるからだな。
953デフォルトの名無しさん (ワッチョイ 07e3-Dwo1)
2018/03/02(金) 18:31:43.84ID:ORIKCzBj0 まあ、動いてるならスマートにする必要ってないよな
普通に記述してそれがイモっぽいなら
そりゃ言語がイモなんでしょうがないんだよ
普通に記述してそれがイモっぽいなら
そりゃ言語がイモなんでしょうがないんだよ
954デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/02(金) 18:37:23.64ID:Ht5IxdGD0 >>944
マルチキャスティングデリゲートは?
マルチキャスティングデリゲートは?
955デフォルトの名無しさん (ワッチョイ 0783-k3ZN)
2018/03/02(金) 18:37:24.20ID:+QaGy5B+0 stateいらないとか、テストやデバッグするときstateが分からなくなるのに。
マルチスレッドや同期を書かせたらいけない人。
マルチスレッドや同期を書かせたらいけない人。
956デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 18:46:01.75ID:IwZ3DIkv0 Timer1のなかにステートマシンつくったらなんでもできるけど、わかり難いだろ。
フローチャートのように上から下へ自然に流れる方がいい。
フローチャートのように上から下へ自然に流れる方がいい。
957デフォルトの名無しさん (スッップ Sdff-QDoW)
2018/03/02(金) 18:48:03.88ID:Ej2mk6Y7d おじいちゃんか
958デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 18:50:30.27ID:IwZ3DIkv0 >>952
var cts = new CancellationTokenSource();
Task.WhenAll(
Task.Run(() => EventLoop(cts)),
TimerLoop(cts.Token)
).Wait();
こういう書き方を見るにつけ、なにかいい方法はないかとつらつらと考えてる。
var cts = new CancellationTokenSource();
Task.WhenAll(
Task.Run(() => EventLoop(cts)),
TimerLoop(cts.Token)
).Wait();
こういう書き方を見るにつけ、なにかいい方法はないかとつらつらと考えてる。
959デフォルトの名無しさん (アウアウエー Sa9f-OA7j)
2018/03/02(金) 18:56:31.02ID:AXJZJbYfa あとはこんなの
IEnumerable<Action> JobSequece()
{
while (true)
{
yield return () => { ... };
yield return () => { ... };
....
}
}
async Task RoundRobin()
{
foreach(var j in JobSequece())
{
await Task.Run(() =>Thread.Sleep(100));
j();
}
}
タイマー割り込みって言葉使うのはHW直接いじる超低水準のコード書いてる人か
80年代マイコン少年のおじさんだろうねw
IEnumerable<Action> JobSequece()
{
while (true)
{
yield return () => { ... };
yield return () => { ... };
....
}
}
async Task RoundRobin()
{
foreach(var j in JobSequece())
{
await Task.Run(() =>Thread.Sleep(100));
j();
}
}
タイマー割り込みって言葉使うのはHW直接いじる超低水準のコード書いてる人か
80年代マイコン少年のおじさんだろうねw
960デフォルトの名無しさん (アウアウウー Sa2b-dKqy)
2018/03/02(金) 18:58:45.70ID:EhvNkrDWa >>958
WhenAllをよく使う人はTPL Dataflowを覚えたほうがいい
WhenAllをよく使う人はTPL Dataflowを覚えたほうがいい
961デフォルトの名無しさん (ワッチョイ df9d-wl/W)
2018/03/02(金) 19:02:23.48ID:IwZ3DIkv0 C++ならTimer割り込みって言葉は普通につかうぜよ。
962デフォルトの名無しさん (ワッチョイ dfd2-QDoW)
2018/03/02(金) 19:43:53.86ID:kefJfyuu0 >>961
c#スレやでここ
c#スレやでここ
963デフォルトの名無しさん (ワッチョイ 0781-cszp)
2018/03/02(金) 19:48:25.47ID:uaCZv/NI0 重大インシデント発生させそうな輩ばっかやな。
964デフォルトの名無しさん (ワッチョイ 7fc9-m1UI)
2018/03/02(金) 21:11:38.83ID:Gwpj8bix0 >>960
TPL Dataflow便利そうやね
TPL Dataflow便利そうやね
965デフォルトの名無しさん (ワッチョイ 87d2-Vmra)
2018/03/03(土) 00:37:31.41ID:wLcwZl2a0 本を読みながらUnityでC#を勉強しているのですが・・・
それぞれのコードの最後の行にあるnewは何をしているのか教えて下さい。
public class ArrowGenerator : MonoBehavior {
public GameObject arrowPrefab;
float span = 1,0f;
float delta = 0;
void Update()
this.delta > this.span) {
GameObject go = Instantiate(arrowPrefab) as GameObject:
int px = Random.Range(-6, 7);
go,tansform.positon = new Vector3(px, 7, 0);
}
}
}
他にも
public class IgaguriController : MonoBehavior {
public void Shoot(Vector3 dir) {
GetComponent<Rigidbody>().AddForce(dir);
}
void Start() {
Shoot(new Vector3(0, 200, 3000));
}
}
長いので分割します。すみません。
それぞれのコードの最後の行にあるnewは何をしているのか教えて下さい。
public class ArrowGenerator : MonoBehavior {
public GameObject arrowPrefab;
float span = 1,0f;
float delta = 0;
void Update()
this.delta > this.span) {
GameObject go = Instantiate(arrowPrefab) as GameObject:
int px = Random.Range(-6, 7);
go,tansform.positon = new Vector3(px, 7, 0);
}
}
}
他にも
public class IgaguriController : MonoBehavior {
public void Shoot(Vector3 dir) {
GetComponent<Rigidbody>().AddForce(dir);
}
void Start() {
Shoot(new Vector3(0, 200, 3000));
}
}
長いので分割します。すみません。
966965 (ワッチョイ 87d2-Vmra)
2018/03/03(土) 00:38:39.14ID:wLcwZl2a0 それぞれ最後の行の、
go,tansform.positon = new Vector3(px, 7, 0);
Shoot(new Vector3(0, 200, 3000));
このnew演算子?は何をしているのでしょうか?
それぞれVector3というメソッドが直後のカッコの中の引数を渡していると思うのですが
その手前のnewが何なのかわかりません
クラスをインスタンスにするときに使用するnewとは若干形が違いますよね
いくら調べてもこの形のタイプのnewが出てこなくて・・・。
どなたか宜しくお願いします・・・。
go,tansform.positon = new Vector3(px, 7, 0);
Shoot(new Vector3(0, 200, 3000));
このnew演算子?は何をしているのでしょうか?
それぞれVector3というメソッドが直後のカッコの中の引数を渡していると思うのですが
その手前のnewが何なのかわかりません
クラスをインスタンスにするときに使用するnewとは若干形が違いますよね
いくら調べてもこの形のタイプのnewが出てこなくて・・・。
どなたか宜しくお願いします・・・。
967965 (ワッチョイ 87d2-Vmra)
2018/03/03(土) 00:41:09.07ID:wLcwZl2a0 ああ・・・空白が埋まってしまっていてとても見づらいですね
本当にすみません
本当にすみません
968デフォルトの名無しさん (ワッチョイ 07d3-m1UI)
2018/03/03(土) 00:55:45.51ID:FSjtVpQl0 値型のnewだから意味は違うけど形は一緒やろ
969デフォルトの名無しさん (ワッチョイ 07e3-Dwo1)
2018/03/03(土) 01:03:49.08ID:SBEkwl3H0970デフォルトの名無しさん (ワッチョイ dfb3-jrZP)
2018/03/03(土) 01:15:14.08ID:gHPIEkfR0 Vector3(x,y,z)はコンストラクタだよ
だからnewを付けて呼び出す
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-constructors
基本文法をどっかで学んでからのほうがいいんでないかい?
だからnewを付けて呼び出す
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-constructors
基本文法をどっかで学んでからのほうがいいんでないかい?
971965 (ワッチョイ 87d2-Vmra)
2018/03/03(土) 01:34:37.27ID:wLcwZl2a0 メソッドではなくクラスですね。
newは
クラス名 変数 = new クラス名()
の形しか見たことなくて・・・
上は
Vector3 go,tansform.positon = new Vector3(px, 7, 0);
という風に頭にもVector3 を付けないのですか?
下は
Shoot(Vector3 ABC = new Vector3(0, 200, 3000));
といった風に、ABCの様な変数は表記しないで、クラス名にnewを添えただけでも
クラスをインスタンス化できるのでしょうか?
>>970
一応、上のは入門書に書いてあるコードなのですよね
入門書が不親切なのか私に応用力がないのか・・・後者っぽいですね
他の入門書も調べて買ってみます
newは
クラス名 変数 = new クラス名()
の形しか見たことなくて・・・
上は
Vector3 go,tansform.positon = new Vector3(px, 7, 0);
という風に頭にもVector3 を付けないのですか?
下は
Shoot(Vector3 ABC = new Vector3(0, 200, 3000));
といった風に、ABCの様な変数は表記しないで、クラス名にnewを添えただけでも
クラスをインスタンス化できるのでしょうか?
>>970
一応、上のは入門書に書いてあるコードなのですよね
入門書が不親切なのか私に応用力がないのか・・・後者っぽいですね
他の入門書も調べて買ってみます
972デフォルトの名無しさん (ワッチョイ 0783-k3ZN)
2018/03/03(土) 01:40:19.42ID:L5H5D1W/0 C#は糞だから初心者が混乱するのも無理はない。
973デフォルトの名無しさん (ワッチョイ dfd2-YBR1)
2018/03/03(土) 02:15:20.99ID:kXsLgfSK0 コードを形で覚えてるのかなぁ
式という概念は分かるかな?
式という概念は分かるかな?
974デフォルトの名無しさん (ワッチョイ df06-k3ZN)
2018/03/03(土) 02:45:02.94ID:jgGrGcb50 >>971
コードがタイポってる気がするが、上はフィールドへの代入だから
TransformクラスでpositionはVector3Dであると既に定義されている
下はコードにメソッド定義も含まれていて仮引数の型が書いてあるよね
変数宣言の型指定であって、インスタンス化には代入を伴う制約はない
未初期化の変数は参照できないから殆どは宣言時に代入もされるけど
それぞれの字句に切り分けて意味を把握しないと歪んだ理解になります
コードがタイポってる気がするが、上はフィールドへの代入だから
TransformクラスでpositionはVector3Dであると既に定義されている
下はコードにメソッド定義も含まれていて仮引数の型が書いてあるよね
変数宣言の型指定であって、インスタンス化には代入を伴う制約はない
未初期化の変数は参照できないから殆どは宣言時に代入もされるけど
それぞれの字句に切り分けて意味を把握しないと歪んだ理解になります
975965 (ワッチョイ 87d2-Vmra)
2018/03/03(土) 07:33:03.46ID:wLcwZl2a0 >>974
とても詳しく教えて頂きありがとうございます
そういうことなのですね・・・やっと少し理解できました
意味を捉えようとは思って勉強していたのですが形で覚えていたんですね
1単語?ずつ意味を捉える様に意識してみます
皆さん変な質問にお答え頂きありがとうございました!
とても詳しく教えて頂きありがとうございます
そういうことなのですね・・・やっと少し理解できました
意味を捉えようとは思って勉強していたのですが形で覚えていたんですね
1単語?ずつ意味を捉える様に意識してみます
皆さん変な質問にお答え頂きありがとうございました!
976デフォルトの名無しさん (ワッチョイ 6775-LhZF)
2018/03/03(土) 08:22:24.39ID:kknO3Mli0 Vector3 vec; 変数定義
vec = new Vector3(1,3,2); インスタンス生成後、変数に代入
vec = new Vector3(1,3,2); インスタンス生成後、変数に代入
977デフォルトの名無しさん (ワッチョイ df19-4wjg)
2018/03/03(土) 09:12:41.41ID:PjugdM0i0 処理の結果を返してくれるapiで、例えば
貼り付けるテキストを決める
フォント名設定
色設定
文字の大きさ設定
なと細かくapiを呼び出ししないといけない場合でも、結果を受け取る変数はやっぱり使い回ししないほうがいいですか?その変数はapi呼び出したあとエラー確認するだけです
貼り付けるテキストを決める
フォント名設定
色設定
文字の大きさ設定
なと細かくapiを呼び出ししないといけない場合でも、結果を受け取る変数はやっぱり使い回ししないほうがいいですか?その変数はapi呼び出したあとエラー確認するだけです
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 【広島】ペルー女性の国保加入を誤って認め、福山市が医療費484万円を肩代わりするミス…入院して手術を受ける [ぐれ★]
