ふらっと C#,C♯,C#(初心者用) Part134

■ このスレッドは過去ログ倉庫に格納されています
2017/11/29(水) 19:23:58.05ID:GNLsbK4F0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
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: checked:vvvvv:1000:512:----: EXT was configured
2017/12/22(金) 06:19:42.32ID:agnD/jLFa
>>47
どんなのが理想なんだ?
ぶっちゃけほとんどの質問に回答がもらえてるようだが
2017/12/22(金) 09:45:16.77ID:Vx5ddxy90
ワードサラダボーイがいないスレ
2017/12/22(金) 09:53:06.84ID:8f8y8qIA6
それは何ですか?
2017/12/22(金) 09:55:25.36ID:oR3DRk2W0
会計システムはクラサバが最低限の要件なので、計算はDBでやるからクラス分けなど何の役にも立たないし却って邪魔だ
彼はクラサバと無縁なスタンドアローンの世界に住んでいるのかもしれんね
2017/12/22(金) 10:08:25.66ID:2CqGXpCvM
スタンドアロンだとして、どういうデータ設計したら費用項目ごとにクラスができるんだろうね
日付, 費用種別コード, 金額
まさかこんなタプルで管理してるんだろうか
2017/12/22(金) 10:17:07.48ID:sp7ymsVp0
自称上級者様ご降臨〜 w
54デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:23:52.41ID:lyRs/gAjM
そ、ギョーミーな戦場ではオブジェクト指向などと言う玩具の武器は役に立たない
2017/12/22(金) 10:26:29.36ID:xQ825djR0
>>54
いまだにこんな老害がいるからね
56デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:32:48.81ID:lyRs/gAjM
何をいっておる、LinqもLambdaも戦場の小火器として使えるが腐ったオブジェクト指向など使えぬわ
2017/12/22(金) 10:56:00.35ID:pMoYdCae0
関数型がいいって言いたいの?
58デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:59:19.90ID:lyRs/gAjM
腐ったオブジェクト指向脳で単純なものを複雑にするヤツが大嫌いなだけ
2017/12/22(金) 11:05:05.39ID:oEPXElot0
結局個人的感情か
毎回レスの最後に ※個人の感想です って付けとけよ
2017/12/22(金) 11:10:42.54ID:cOtumJc5a
>>59
全レスそうだから省略できる

もちろん個人の感想だが
61デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 11:11:28.05ID:lyRs/gAjM
オブジェクト指向は過去の遺物
2017/12/22(金) 12:24:49.48ID:4JyKqZfo0
>>61
じゃあ今流行りは何?
2017/12/22(金) 12:29:43.88ID:E5w5T/306
大きなスケール→ガチガチのオブジェクト指向
小さなスケール→手続き型、関数型
2017/12/22(金) 12:35:16.71ID:3WJNmOAXM
名前、住所、電話番号、みたいなデータがあったとして、
Aさんの住所を参照するのに、["A"]的なアクセスするやつ、なかったでしたっけ?
2017/12/22(金) 12:41:08.55ID:sp7ymsVp0
>>64
Dictionaryでいいんじゃね?
2017/12/22(金) 12:47:31.71ID:E5w5T/306
>>64
https://ideone.com/opVzhA
2017/12/22(金) 13:06:22.96ID:4dlvq16La
>>64
そういう仕組みはインデクサという
68デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:32:54.21ID:w6Zu6k6M0
ボタンを押すと処理を緊急停止するプログラムを作りたいのですがどのような方法がありますでしょうか?
2017/12/22(金) 19:39:03.10ID:Ta4DCaCP0
>>68
とりあえずthis.Close()でFormを閉じる
それでだめなら要件を挙げて
70デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:46:47.55ID:w6Zu6k6M0
今はbackgroundWorkerで処理を実行しているのですが
CancelAsync()で停止させても
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
というコードに到達するまで停止しないので停止までに時間があるのを改善したいです
このコードをたくさん差し込むしかないのでしょうか?
2017/12/22(金) 19:51:25.63ID:Ta4DCaCP0
>>70
親フォームでkillしたらbackgroundWorkerも止まるんじゃないの?
72デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:53:12.14ID:w6Zu6k6M0
どういうことでしょう
あらゆる処理をForm1に書いていまして
killの仕方がわからないです
2017/12/22(金) 19:59:46.81ID:Ta4DCaCP0
backgroundWorker以外の処理は生かしておきたいって話なら分からないな
>>70
というかキャンセル用のフラグ作って止めなきゃならないところに停止処理差し込むのがそんな大変だとも思えないけど
楽したいってのはわかるけど、それは他の人に聞いて
2017/12/22(金) 20:00:08.26ID:W8xzYPPc0
>このコードをたくさん差し込むしかないのでしょうか?
>あらゆる処理をForm1に書いていまして

まず、設計の仕方を覚えた方が良い
75デフォルトの名無しさん (ワッチョイ ff19-vkjg)
垢版 |
2017/12/22(金) 20:10:01.65ID:HDUqSz1r0
>>68
Application.Exit();
2017/12/22(金) 20:31:26.17ID:kA+szNzE0
自作プログラムでSemaphoreFullExceptionが発生したんだけど、これってSemaphore使って無くてもTaskやawait使っていれば発生するようなもんなの?
2017/12/22(金) 20:34:55.44ID:2CqGXpCvM
なぜスタックトレースを見ないのか
2017/12/22(金) 20:39:08.36ID:kA+szNzE0
>>77
Unhandledで拾ったは良いものの、例外詳細見たらスタックトレースに他の発生行が無くてその例外行だけだったのよ
どこかでthrowし直してたとしてもその行が表示されるのにな
2017/12/22(金) 20:40:07.26ID:4dlvq16La
まあ普通に使い方間違えてバグってんでしょ
2017/12/22(金) 20:47:43.11ID:G9MI+OvKa
>>70
なんか先週ぐらいも同じ質問してた人がいたけどw

だからさあ、メソッドを外から強制的に止めようって発想が間違ってる。
メソッド自身が何かをポーリングして自分で止まるように作る
81デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 21:17:12.68ID:w6Zu6k6M0
>>80
それ自分です!
2017/12/22(金) 21:18:00.45ID:UrkxRoCQ0
二度も同じことを聞くんじゃない
2017/12/22(金) 21:27:30.25ID:G9MI+OvKa
>>81
マジすかw
2017/12/22(金) 21:30:54.07ID:W8xzYPPc0
わろす
2017/12/22(金) 21:46:10.24ID:Kw0QQsKg0
潔くてすき
2017/12/22(金) 22:28:43.29ID:4JyKqZfo0
backgroundworkerとtaskの違いは何よ?
87デフォルトの名無しさん (ワッチョイ 6f76-5z/u)
垢版 |
2017/12/22(金) 22:41:34.49ID:Iyc/J/sJ0
BackgroundWorkerはレガシー
2017/12/22(金) 23:26:00.99ID:vOV0CWVO0
>>81
ここで2回も聞くぐらいなら
やりたいことを英語にしてGoogleで検索した方がいいよ
ここにいる人が知らないか教えないだけで
やり方はちゃんとある
ポーリングとか今どきダサすぎるからやめとけ
2017/12/22(金) 23:41:50.51ID:G9MI+OvKa
いやいやないからアホかw
あるなら言ってみ。まあ無理せんでよろしい。

生スレッドは強制終了できるが普通は推奨されない。
2017/12/22(金) 23:43:22.66ID:G9MI+OvKa
そもそも外から強制的に止めるって発想に疑問を持たない時点でセンスがない
2017/12/22(金) 23:43:31.65ID:teKS3rfy0
>>88
スレッドの強制停止は推奨されないから、事実上ポーリング的な手法しか無いと思うけど。
(マルチプロセスは考えないとして)
2017/12/22(金) 23:48:36.08ID:teKS3rfy0
CancellationToken.ThrowIfCancellationRequested()使うけど、これもポーリングだしな。
2017/12/22(金) 23:54:28.61ID:oR3DRk2W0
>>88
つか、今標準のCancellationTokenもポーリングが基本だよ
そっから抜け出るのに例外使うのがミソではあるが
2017/12/23(土) 01:24:21.53ID:ti8BrBts0
スリープで時間かかってたり繰り返しスリープ入れてるなら
Interruptを使って無理矢理中断させることもできる
2017/12/23(土) 08:12:59.96ID:FPRjmoIB0
>>70
Async が付いている関数は、非同期処理だから、コンテキストが異なる。
だから、処理が実行される順番が確定しない

Sync なら同期処理だから、順番が1つに決まる。
つまり、ソースコードの上から下へ、順に実行される

コンテキストが異なるもの同士が通信するには、プロセス間通信(IPC)を使う。
基本的には、相手のキューに、投入することしかできない

1. 依頼する。A プロセス → OS → B プロセス
2. B が届いたメッセージを処理する
3. 返事する。B プロセス → OS → A プロセス

これを同期処理にすると、1〜3 の処理中、
アプリが止まる(ストール)から、GUI では嫌われる。
50ms 以上掛かる処理は、非同期処理にすべき

逆に、CUI では同期処理にして、コンソールが止まる
2017/12/23(土) 08:22:18.86ID:7ZChdQbJ0
このどことなくズレたレスをつける句読点過剰くんってのは、やはり糖質なのだろうか?
2017/12/23(土) 08:23:33.88ID:ti8BrBts0
句読点箇条君はすぐわかるな
そして必ず間違ってる
スレッドが違うだけならIPCなんか使う必要ない
普通は単にメモリを共有する
FormsのBeginInvokeなどで使われているSynchronizationContextのキューも普通にメモリを共有してるだけだ
2017/12/23(土) 08:24:22.31ID:FPRjmoIB0
つまり、1〜3 は、OS が行っている事だから、何もできる事が無い。
OS レスのマイコンとかなら、自分でプログラミングするけど

何かをしようとしても、OS がCPU のタイムスライス、
プロセスの優先度・実行順番を決めているから、何もできない

それがOS。
OSレスなら、それらを自分でプログラミングしないといけないから、無理
2017/12/23(土) 08:45:11.75ID:ti8BrBts0
このアスペは>>97も理解してないんだと思うけど、初心者スレだから改めて否定しておく
スレッドが違うだけなら、>>95の123は正しくはこう
1. スレッドAがジョブの情報Jをメモリ上のキューQに登録する
2. スレッドBはQからJを取り出し、Jの内容に従って処理を実行する
3. Bは処理結果RをキューQ'に登録する
4. AはQ'からRを取り出し、後続処理を実行する
AとBの間で普通にQやQ'を直接共有してるだけで、OSなんか全く関係ない
そもそもマルチスレッドに限った話でもなく、例えば、ゲーム内で2つのキャラクターの間でやり取りしたい、
でも直接メソッドを呼ぶと長くなるとか、間にウェイトを入れたいとかで一旦処理をゲームループに戻したい、なんて時にも使える
2017/12/23(土) 10:27:32.58ID:AW7swrGi0
オレオレキューなんぞつかわずにTaskを使え
バックグラウンドといえどインプロセスで長大な処理を発生させるな
そういうのはジョブ管理サービスを使えHangfireとかな
2017/12/23(土) 11:10:58.80ID:7ZChdQbJ0
今回はTaskかどうかは問題ではなく
「BackgroundWorkerの処理を中断する方法で、ポーリングより面倒くさくない方法があったら教えて」
なので
Thread.Abortでも使え
2017/12/23(土) 11:12:40.52ID:7ZChdQbJ0
Task大好きッ子もなかなかスレの流れ読んでねえよな
2017/12/23(土) 11:29:15.39ID:m8DTIJvo0
asyncつけてるとエラー発生したらデバッグの実行位置の矢印の動きがおかしくなる
2017/12/23(土) 11:42:39.57ID:A76YiAtwM
RunWorkerCompletedでイベントオブジェクトのフラグをいじり、それを待機とかだめ?
2017/12/23(土) 12:51:18.15ID:kNBZIa630
Task関連は7標準のランタイムだと使えないからいまだにBackgroundWorker使ってる
まあ他ソフトの事情で.NET 4以降一切入れないってことはないんだけどさ
2017/12/23(土) 13:21:31.65ID:kNBZIa630
自分のBackgroundWorker使ってるソース見てみると、
処理単位でループして1処理終った後と、長い処理の途中でwk.CancellationPending == trueで抜けるか判定してる
イベント待ちはタイムアウト設定して一旦抜ける
という感じだった
Task使っても同じだろう
2017/12/23(土) 13:24:28.81ID:eJOJ1LQ5M
@Abortはしたくない
Aメインループのフラグチェックでは頻度が足りない
Bでもフラグチェック処理を書き足すのは嫌だ

要件はこれでいいか?
真面目に考えるとメタプログラミングの領域だな
チェック頻度とパフォーマンスのトレードオフも考えなきゃならん
初心者スレ民の実力では難しいんじゃないか?
2017/12/23(土) 13:34:41.82ID:ktMndlca0
>>107
この頻度が足りないって、メインループの記述が冗長とか別の理由ありそうな気がするわ
2017/12/23(土) 13:41:27.68ID:eJOJ1LQ5M
クッソ長いループ書いてんだろうな
マルチスレッドより先に基本的なコード整理術を覚えたほうがいい
110デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 13:46:44.49ID:suzKftpB0
たくさんレスありがとうございます。
わからない言葉がたくさんあるので調べてまた来ます。
111デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 14:02:46.78ID:suzKftpB0
キーボードをa,b,c,dと順番に5秒置きに押していくメソッドをBackgroundWorker内で無限ループさせていて
キャンセルボタンを押したときすぐに止まって欲しいのですが必ずdまで押されてから止まるので困っているという感じです

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
play_abcd();

if (backgroundWorker1.CancellationPending)
{
// イベントをキャンセルする
e.Cancel = true;
return;
}
}
}
2017/12/23(土) 14:10:55.29ID:saCRURuP0
そりゃそうだろって反応しか返ってこないと思う
113デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 14:19:46.07ID:suzKftpB0
キーボードをa,b,c,dと順番に5秒置きに押していってすぐ途中で止められるプログラムを作るには
どういう方法があるんでしょうか?BackgroundWorkerにはこだわりません。
play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあってBackgroundWorkerを使うと
プログラム実行中でもきちんと表示されるのでBackgroundWorkerを使っています
2017/12/23(土) 14:42:50.03ID:AW7swrGi0
private IEnumerable<Action> GetJobs(int sleepMilliseconds) {
/**/var buttons = new [] { btnA, btnB, btnC, btnD };
/**/while (true) {
/**//**/foreach (var button in buttons) {
/**//**//**/yield return () => button.Click();
/**//**//**/yield return () => Thread.Sleep(sleepMilliseconds);
/**//**/}
/**/}
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
/**/while (true) {
/**//**/foreach (var job in GetJobs()) {
/**//**//**/job();
/**//**//**/if (backgroundWorker1.CancellationPending) {
/**//**//**//**/e.Cancel = true;
/**//**//**//**/return;
/**//**//**/}
/**//**/}
/**/}
}
2017/12/23(土) 14:43:52.99ID:7NR5j+Xf0
play_aとplay_bとplay_cとplay_dを分ける
デリゲート配列にしてforeachで回せばチェックは一カ所で済む
2017/12/23(土) 14:47:49.51ID:97OmZxF20
メソッドの名前がメンタルに悪い
2017/12/23(土) 14:57:49.84ID:eJOJ1LQ5M
5chはいつになったらGFM対応するんだ
2017/12/23(土) 15:46:06.35ID:KAucFFwx0
BackgroundWorkerじゃなくてタイマー使うべきだよ
2017/12/23(土) 16:17:28.04ID:Nxx0V5wTa
>>111
>>113
>play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあって
ってことはたぶんplay_abcdの中でbackgroundWorker1.ReportProgressを呼んでいる、
つまりbackgroundWorker1を参照できる場所にplay_abcdはあるんだから、
素直にCancellationPendingをポーリングするだけじゃないの?
本当はよくないと思うけどねこういうの

本当は前も書いたみたいにplay_abcdのシグネチャを
void play_abcd(Func<bool> canceled){...}

とかにして、呼び出すときに、
play_abcd(() => backgroundWorker1.CancellationPending);

がいいと思う

っていうか、そもそも
>キーボードをa,b,c,dと順番に5秒置きに押していくメソッド
をビジーループで実弁する必要本当にある?w

それ、タイマーで十分実現できると思うんだけど...
2017/12/23(土) 16:39:39.92ID:eJOJ1LQ5M
タイマーとかめんどくさいだけだろ
2017/12/23(土) 16:58:02.75ID:oBD8VcBx0
BackgroundWorkerのほうが実装が綺麗になるよね
2017/12/23(土) 17:54:59.64ID:433UoltE0
>>117
スペース2つで改行だっけ?
普通のレスの書き方と分離するためにコマンドを先頭に付けるとかかな
専ブラが対応すれば専ブラだけでは見れるな
2017/12/23(土) 18:17:28.09ID:MO+dM8J20
>>121
どう言う理由で?
2017/12/23(土) 18:52:05.60ID:vwLvtl/C0
タイマーなら、キャンセルでタイマー止めればそれで終わりでしょ
実装が見苦しいようには見えんね
2017/12/23(土) 18:57:13.19ID:AW7swrGi0
ためしに書いてみてよ
2017/12/23(土) 19:41:20.88ID:vwLvtl/C0
>>125
https://ideone.com/bZPXyC
色々端折ったけどこんな感じでどう?
2017/12/23(土) 19:47:21.47ID:PvZdk9430
>>113
そもそも、なんで提示したコードがdまで実行しないとキャンセルされないか理解できてる?
理解出来てればBackgroundWorkerを別の手法に変えても意味がないことは分かると思うんだけど
2017/12/23(土) 20:47:59.87ID:afY4COyy0
>>107
>Abortはしたくない
元質問者はAbortしたくないとは言ってないと思うぞ
2017/12/23(土) 21:18:44.75ID:XrEDpSoU0
バックグラウンドなんちゃらってなんだ?
タイマーでいいじゃん
2017/12/23(土) 21:19:57.12ID:eJOJ1LQ5M
>>126
そんなに悪くないね
bの後2秒待ってコンソールにハゲと出力
3秒後にc
みたいな仕様変更があったとしたらどうなる?
2017/12/23(土) 21:21:13.92ID:XrEDpSoU0
>>130
アホなん?
そんなレアケース持ち出して何が楽しいんだ?
そんな風になったら別のコーディングするに決まってんじゃん
2017/12/23(土) 21:26:21.49ID:XrEDpSoU0
タイマーでもTickイベントを1秒おきにすればその実装できるし
while+sleepとかアホすぎるわ
2017/12/23(土) 21:29:55.10ID:eJOJ1LQ5M
>>131
推測でしかないが質問者のやりたい事ってAPIが提供されてないアプリのGUIオートメーションだと思うんだ
やってみるとわかるけど、等間隔キー入力の繰り返し、のような単調な操作のほうがむしろレアケースだよ
2017/12/23(土) 21:31:02.84ID:YgD70bUC0
態々スレッド分ける様な処理じゃないのは間違いない
2017/12/23(土) 21:33:38.79ID:XrEDpSoU0
バックグラウンドワーカーとかタイマーじゃなくてTask.Runの中にwhileとsleepとカウンタを全部ねじ込んだほうががまとまりがいいな
2017/12/23(土) 21:37:57.32ID:XrEDpSoU0
やっぱなんでもない
俺のレスはスルーで
2017/12/23(土) 21:39:10.88ID:oBD8VcBx0
相変わらず質問者抜きの議論が大好きだなお前らは
2017/12/23(土) 21:42:59.27ID:eJOJ1LQ5M
ちなみに>>114の実装ならマクロが多少複雑化しても可読性がそこそこ良いのでオススメ

IEnumerable<Action> GetJobs() {
while (true) {
yield return () => SendKeys("A");
yield return () => Sleep(5000);
yield return () => SendKeys("B");
yield return () => Sleep(2000);
yield return () => SendKeys("ハゲ");
yield return () => Sleep(3000);
yield return () => SendKeys("C");
yield return () => Sleep(5000);
yield return () => SendKeys("D");
yield return () => Sleep(5000);
}

この考え方を進化させてJobsをActionの列挙ではなく式木にしたら記述が楽そうだな、とかインタープリターパターンで実装したらユーザー目線で便利そうだな、とか発展していく
2017/12/23(土) 22:13:16.73ID:7ZChdQbJ0
百万年発展し続けてろバーカ
2017/12/23(土) 22:20:22.98ID:eJOJ1LQ5M
初心者用スレというか子供用スレだったのか
141デフォルトの名無しさん (ワッチョイ cf80-fDvV)
垢版 |
2017/12/23(土) 22:36:15.16ID:FPRjmoIB0
非同期処理は、コンテキストが異なるから、処理の実行順番は確定しない

ビジーループするのは、もってのほか。
ビジーループは同期処理

非同期処理は、コールバック関数を使う。
相手の処理が終わったら、コールバック関数を呼んでもらう

コンテキストが異なるものは、マルチスレッド・マルチプロセスでも、
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから、
プログラマーができる事は無い

複数のスレッド・プロセスは、無関係に同時に、異なるCPU で動く(並行処理)から、
処理時間が短くなるが、処理の実行順番は、OS が決めるから確定しない

同期処理とは異なる
2017/12/23(土) 23:00:34.49ID:vwLvtl/C0
一番の問題は、最悪5秒戻ってこないポンコツってことだと思う
2017/12/23(土) 23:04:50.10ID:eJOJ1LQ5M
結論はやっぱりTask使えって事だな
2017/12/23(土) 23:31:47.43ID:FPRjmoIB0
そもそも、ビジーループ(ポーリング)しても意味がない

例えば、スレッドA から、10ms 毎にポーリングしても、
スレッドB の処理が10秒掛かれば、千回のポーリングは無意味

ポーリングしても、異なるスレッドの処理を速めることはできない。
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから

プログラマーにできることは、コールバック関数を登録することだけ。
スレッドBの処理が終われば、それを呼んでもらうだけ
2017/12/23(土) 23:34:38.24ID:oRgQl+h80
鈴虫がまだ何か言ってるな
鈴虫は鈴虫の学校にでも通ってな
2017/12/24(日) 02:28:49.95ID:BEcZgz8A0
フリーズしない/しても問題ないUIにすればいいだけだと思うが
2017/12/24(日) 07:08:55.16ID:kiz3NtEj0
play_abcdって雑な作りから察すると5秒おきってのはaの動作が終わってから5秒なんじゃね?
本当に5秒感覚でキーを押したいならタイマーがいいけど、各動作を5秒感覚で実行したいならタイマーは使わない方がいいかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況