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

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

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

■関連スレ
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/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/

■コードを貼る場合は↓を使いましょう。
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
2018/03/26(月) 21:26:27.62ID:SPNFNX7k
>>653
キーワードわかっているものはさすがにググれ
https://msdn.microsoft.com/ja-jp/library/system.datetime(v=vs.110).aspx
減算・後の数値かどうか。メソッドも演算子も全部書いてある
2018/03/26(月) 21:52:26.85ID:e5zVULSK
ありがとう御座います
datetime同士の計算結果であるtimespanはtimespan>=0やtimespan<0で場合分けしても差し支えないのでしょうか
2018/03/26(月) 21:55:12.57ID:VM7iT5OR
>>655
いや普通にDateTime同士で大小比較できるぞ
2018/03/26(月) 22:00:38.75ID:/1kq2kd6
いや、それ以前に
>>654がせっかく
> 演算子も全部書いてある
って言ってるんだからちゃんと見ようよ
https://msdn.microsoft.com/ja-jp/library/system.datetime.op_lessthan(v=vs.110).aspx
2018/03/26(月) 22:08:40.49ID:e5zVULSK
なるほど、datetimeで大小比較すればいいのですね
ありがとう御座います

msdn分かりにくくありませんか?
難しい(*_*)
659デフォルトの名無しさん
垢版 |
2018/03/26(月) 22:18:02.65ID:AHHYeqDL
>>658
分かりにくいよね
俺も前からそー思ってけど言い出しにくかった
2018/03/26(月) 22:36:24.40ID:pJYeIgRu
unixtimeを4.0でDateTime型に変換するにはどうすればよかたい
2018/03/26(月) 22:42:13.90ID:iiFlz3sh
>>660
4.0とは?
2018/03/26(月) 22:56:15.63ID:e5zVULSK
backgroundworker開始時に次の17時になるdatetimeを取得してループ開始、ループ毎に現在のdatetimeと設定のdatetimeを比較して過ぎていたら停止させようと思うのですが
次の17時のdatetimeを取得する方法はありますか?
2018/03/26(月) 23:34:03.76ID:Hi5Z0lMV
c# datetime unixtime
2018/03/26(月) 23:48:44.24ID:lh4NSg1Q
>>662
datetimeそのものじゃなくても時間だけならHourを比較したらいいよ

var h=Datetime.Now.Hour;

if( h>=9 ){ ... } //9時以降なら
2018/03/26(月) 23:56:49.96ID:pJYeIgRu
>>661
.netです
2018/03/27(火) 00:02:34.95ID:RoQzbf+s
>>664
それがすごい気になるんですが
9時以降っていうのは何時までを指すのでしょうか?
極端な話次の日の8時とかになっても条件を満たしますか?
2018/03/27(火) 00:06:42.35ID:5DREL+sj
>>665
.NET Framework4.0のこと?もうとっくにサポート切れてるけど合ってる?
2018/03/27(火) 00:06:43.46ID:1syCFnvF
どこ基準のUNIXTIMEか知らないけど1970年1月1日からの経過秒数だから
var origin =new DateTime(1970,1,1);
var unixtime=DateTime.Now-origin;

タイムゾーンは自分で好きなようにしてください

>>666
Hourはあくまでも時間の部分だけだから0時になったら満たさなくなる
条件はよく考えて自分で設定すること
2018/03/27(火) 00:08:14.05ID:1syCFnvF
ああ抜けてる

var origin =new DateTime(1970,1,1);
var unixtime=( DateTime.Now-origin ).TotalSeconds;
2018/03/27(火) 00:20:12.69ID:RoQzbf+s
なるほど、ではループが30分の場合
終了を23時50分に設定してしまうと止まらず動いたままになる可能性もあるということですね
2018/03/27(火) 00:30:37.92ID:i+K8FLsM
>>662
var n = DateTime.Now; // 今
var s = n.Date.AddHours(17); // 今日の17時
var x = n < s ? s : s.AddDays(1); // 次の17時
while (DateTime.Now < x) {
// 次の17時まで何かする
}
2018/03/27(火) 00:33:39.52ID:1syCFnvF
Datetimeのコンストラクタはいろいろなパターンがあるからどうとでも作れる
DatetimeはTimespanを足して新しいDatetimeもつくれるので

まあじっくり見て勉強することだな

終了条件をどのように設計してるのか知らないけど特定の日付の特定の時刻を設定してたら
途中で休止などして時刻を過ぎた後、再度復帰した場合すぐ終了してしまう
そして、指定時間以降だったらまたすぐ動くことになる

などどういうことを想定するよって何を選ぶかは変わる
2018/03/27(火) 00:34:17.93ID:1syCFnvF
>>671
思いっきりバグコードだけど
2018/03/27(火) 00:36:06.00ID:RoQzbf+s
>>671
これいいですね!
解決しそうです。ありがとうございます。
xの?や:の意味がわかりませんがとりあえずコピペします
ラムダ式みたいなものかな?
2018/03/27(火) 00:36:42.86ID:RoQzbf+s
>>673
2018/03/27(火) 00:38:51.06ID:i+K8FLsM
>>673
えっ!?
2018/03/27(火) 00:40:05.98ID:1syCFnvF
>>675
>>676
勘違いしてた
9時スタートで5時終わりの話を引きずってるのかと思ってた
2018/03/27(火) 00:42:26.00ID:tVuDF99u
>>667
え、ソースは?
2018/03/27(火) 00:43:09.93ID:RoQzbf+s
よかったです
?はifで:はelseみたいなものですかね?
便利ですね
2018/03/27(火) 00:46:08.70ID:1syCFnvF
16時59分スタートなら1分でストップ
17時00分ジャストなら次の日の17時まで24時間でストップ
2018/03/27(火) 00:52:08.65ID:i+K8FLsM
>>671は17時直前に呼び出すと何もしないで終わる可能性があるな
do whileのほうがいいかもしれん
682デフォルトの名無しさん
垢版 |
2018/03/27(火) 00:52:53.72ID:dhIDlkWy
終了を17時30分にしたい場合は以下のようなコードで大丈夫でしょうか?

var n = DateTime.Now; // 今
var s = n.Date.AddHours(17).AddMinutes(30); // 今日の17時30分
var x = n < s ? s : s.AddDays(1); // 次の17時30分
while (DateTime.Now < x) {
// 次の17時30分まで何かする
}
683デフォルトの名無しさん
垢版 |
2018/03/27(火) 00:54:52.06ID:dhIDlkWy
>>680
こんな感じでも特に問題はありません。
むしろわかりやすくて希望通りです。
2018/03/27(火) 00:55:47.09ID:7SLvU9BO
DateTimeなんてめったに使わんけど、使ってみたら値型のくせにイミュータブルで
なんだか使いづらいね

// 時分秒が指定した値となる現在より後の直近の日時を返す
public static DateTime GetNextDateTimeFromNow(int hour, int min, int sec)
{
  var now = DateTime.Now;
  var next = new DateTime(now.Year, now.Month, now.Day, hour, min, sec);
  return next > now ? next : next.AddHours(24);
}
2018/03/27(火) 00:56:05.12ID:1syCFnvF
>>682
試せばいい
DateTime.Nowじゃなくて自分てnew Datetime()して
自由にnを作って試せばいい
2018/03/27(火) 00:59:24.75ID:1syCFnvF
>>684
AddHours(24)なのはなぜ?
うるう秒があったらずれる(そんな仕組みは多分ないけど)
2018/03/27(火) 01:00:54.28ID:1syCFnvF
AddDaysでもずれるか
2018/03/27(火) 01:04:20.64ID:5DREL+sj
>>678
ググれば一発やろ
2018/03/27(火) 01:05:23.72ID:Q5x4N+CR
無限ループやってる奴はわざとなのかガチなのか
2018/03/27(火) 01:11:21.45ID:t3gWSj15
仕様が全く見えて来ない
2018/03/27(火) 01:13:48.60ID:t3gWSj15
9:00~17:00でいいんだよな?
692デフォルトの名無しさん
垢版 |
2018/03/27(火) 01:16:52.17ID:dhIDlkWy
とりあえずその時間帯ですが21時から5時までとかにも対応するようにしたいです。
とりあえず出来そうです助かりました。
2018/03/27(火) 01:17:51.30ID:5DREL+sj
>>669
.NET4.6以降ならBCLに専用のAPIが用意されてるからこんなことしなくていいんだけどね
2018/03/27(火) 01:19:00.55ID:tVuDF99u
>>693
糞会社が4.0止まりなんだ
2018/03/27(火) 01:20:41.65ID:rY6p5Eum
>>694
4.0はもうサポート対象外だし、Windows Server 2012も非対応なのに使わざるを得ないとか同情するわ
2018/03/27(火) 01:24:49.59ID:t3gWSj15
>>692
最大実行時間は何時間なん?
21時〜3日後の21時までなんて可能性は排除できるん?
平日と休日とで違いはないん?
とかね
なんか仕様がモヤっとしてんじゃん
697デフォルトの名無しさん
垢版 |
2018/03/27(火) 01:30:08.36ID:dhIDlkWy
>>696
だいたい8から13時間程度の稼動になります!
2018/03/27(火) 01:30:24.22ID:ff4RZBmU
4.X系ならアップグレードのコストはそんなにかからないだろうに
お前が変えさせるか、辞めちまえ
2018/03/27(火) 01:36:06.94ID:t3gWSj15
>>697
最大よ最大
返答に範囲が返って来ると気が狂うん
イレギュラーケースの最大を聞いてん
2018/03/27(火) 01:49:34.53ID:XpaqG/wa
最大13時間です!
すいません!
2018/03/27(火) 03:45:35.94ID:7OwU1Hvz
同期プリミティブ
http://www.tokumaru.org/techterm/primitive.html

ポーリングは、ダメの見本。常識

ランデブーとか、待ち合わせしたいだけだろ。
それか、非同期で、callback してもらえば良いだけw
702デフォルトの名無しさん
垢版 |
2018/03/27(火) 04:03:08.18ID:E80vD2cb
task.delay(100)とTheading.sleep(100)ってどう違うの?
2018/03/27(火) 07:45:14.33ID:i+K8FLsM
素人ってやたらとポーリングを嫌うよね
2018/03/27(火) 09:12:45.31ID:8h15hFzc
CPU100%とか言ってるし無限ループと勘違いしてるんだろ
2018/03/27(火) 09:37:19.37ID:84JRCCml
まあ素人さんはしょうがない
2018/03/27(火) 09:39:14.11ID:kmAPzdoZ
>>702
Thread.Sleepは指定した時間自分のスレッドを停止する
Task.Delayは「指定した時間停止するスレッド」を生成する
Task.Delayは単独では意味がないのでawaitなりContinueWithなりする
2018/03/27(火) 09:48:09.70ID:rY6p5Eum
async/awaitの勉強しているんだが、async voidやasync Taskのメソッドをawait無しで呼び出したらそのメソッドの処理は投げっぱなしになるの?
2018/03/27(火) 10:48:57.49ID:fbReATtq
そだよ。
2018/03/27(火) 12:21:35.26ID:7OwU1Hvz
そもそも、MS が、50ms 以上掛かる処理は、同期処理するなって言ってるだろ。
非同期処理にして、callback してもらうようにって

「ポーリング」で検索して、色々な記事を読め
2018/03/27(火) 12:28:13.60ID:xeybzECW
何がそもそもなんだw
>>709の世界ではDateTimeの比較演算に50msもかかるのかw
30年前のPC-98だってそんなにかからないと思うけどww

ネタなのかマジなのか知らんけど、そもそもHW資源を直接触れないOS上で動くコードは
一件コールバックのように見える処理も実態はポーリング

単にそれがシステム側のコードに隠蔽されてるだけ
2018/03/27(火) 12:35:46.40ID:GW1/xmrB
spin lock なんてものは無かったんや
 いやぁ勉強になるなぁ
2018/03/27(火) 12:38:24.18ID:rY6p5Eum
>>708
サンクス
713デフォルトの名無しさん
垢版 |
2018/03/27(火) 12:39:38.04ID:nnyxYnJQ
元々タスクスケジューラで十分な話をよくもここまで長々と続けられるな
2018/03/27(火) 12:44:03.80ID:Eb35YKQg
質問にとは関係ない部分で知識をひけらかしたい奴がいるから
2018/03/27(火) 13:12:24.26ID:8gmuwQWV
仮にオレがこのソフトを作るとしたら、NotifyIconのデザインで小一時間悩むところから始まるだろうね
2018/03/27(火) 13:45:19.52ID:7OwU1Hvz
何時間も待つ処理だろ。
50ms を超えてるから、非同期処理を使えって、MS が言ってる

自分でプログラミングで、ポーリングしたらダメ

OS の内部処理とは関係ない
2018/03/27(火) 13:53:27.94ID:Eb35YKQg
思い込み激しい奴だな
2018/03/27(火) 14:12:37.92ID:9YSJ28+H
指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
2018/03/27(火) 14:24:49.80ID:zZm0N0X4
スレチ
2018/03/27(火) 14:35:31.77ID:ClOSXPHI
1秒タイマーでタイムアウトするたびに目的の時刻を越えたか
調べるだけでいいじゃないの
違ったら即抜けるだけなのに、50msも掛かる処理じゃねーよ
なんでわざわざタスクスケジューラー使わにゃならんのだ
2018/03/27(火) 15:21:58.88ID:1rmw5Lza
>>709
ぜんぜん理解してないじゃん
2018/03/27(火) 18:28:00.64ID:84JRCCml
コミュ障は病気だからやむを得ないが
読解力は人並みに身につけてから書き込んで欲しいよなw
2018/03/27(火) 19:38:51.59ID:8gmuwQWV
タイマーのインターバルは10秒とか100秒だけじゃなくて、10年でも100年でも設定できるんだから
起動時に開始と停止までの時間を計算してタイマー設定すれば
ポーリングしなくても良いんじゃね?
2018/03/27(火) 19:41:02.82ID:RNGaKb4X
>>723
時刻合わせせずPCの時計を常に基準にするのか
というか仕様や設計の話は他でやってくれないかな
2018/03/27(火) 19:46:25.47ID:a4CYTpTn
>>723
Timerのインターバルはint型でmsec指定
1年の秒数は31536000秒

あれぇ?
2018/03/27(火) 20:12:24.26ID:foR5XOpk
>>724
PCの時刻を基準にしないでどうすんの?
純粋に興味あるから教えてくれ
2018/03/27(火) 20:34:44.17ID:8gmuwQWV
>>725
wpfばかり使ってたんで、DisptcherTimer基準にしていたわ
悪いな
2018/03/27(火) 20:36:49.79ID:D1lCzr9q
初心者の陥りがちなミス

Timeの精度を信用してしまう
途中で時刻修正の入る場合などを考慮しない
2018/03/27(火) 20:40:14.18ID:8gmuwQWV
>>724
今のPCはネットに繋がっていれば時間は自動で合わせてくれる
インターネットに繋がっていない前提ですか?
2018/03/27(火) 20:42:13.82ID:RAm1FIuU
そおです
2018/03/27(火) 20:51:58.53ID:SJRVUf0s
>>710
30年前ってPC9801あったっけ?
2018/03/27(火) 20:56:33.38ID:vavxlF2f
>>731
初代は1982年(36年前)
2018/03/27(火) 20:58:54.08ID:FNmJga7y
こういうインフラの煩わしい制約からコアになる処理を分離したい
ワーカー側は終了再開するためのapiを用意して時間や終了再開するタイミングの事は一切考えない
時間を管理するクラスが適切なタイミングでそれらのapiを実行する

というのが正解な
時間管理クラスが内部でループぶん回そうがシステムコール使おうがそれはどうでもいい
2018/03/27(火) 21:05:37.51ID:D1lCzr9q
c#環境では指定時刻にイベントを起こすAPIは用意されてない
2018/03/27(火) 21:12:23.97ID:9YSJ28+H
指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
2018/03/27(火) 21:13:34.93ID:D1lCzr9q
>>735
スレチ

ここはc#のスレ
2018/03/27(火) 21:14:46.44ID:1tsj2UvO
>>701
callbackはどんな条件のものをどうやって作るんだ
>>729
時刻合わせのタイミングでインターバル補正するコードは思いつかないな
時間定期的にcheckするだけのものをどこまで難しくする気だコイツら
2018/03/27(火) 21:22:44.33ID:rY6p5Eum
>>737
お仕事でなんでこの仕様からこんな糞コードが生まれるんだろと不思議に思うことあるけど、このスレの流れ見たらある意味納得だわ
2018/03/27(火) 21:23:33.47ID:8gmuwQWV
>>737
1秒ポーリングでも最大1秒弱の誤差が出るわけだが、内蔵時計ってそこまで精度悪いの?
実用上問題ない誤差に見えるがちょっと気にしすぎじゃね?
2018/03/27(火) 21:30:26.48ID:xeybzECW
どうでもいい
そんな盛り上がるネタじゃないだろうw
いい加減止めたら?
2018/03/27(火) 21:43:38.37ID:RAm1FIuU
他に居場所がないのでしゅよw
2018/03/27(火) 21:44:08.38ID:FNmJga7y
悲しいね
2018/03/27(火) 22:08:17.45ID:t3gWSj15
1秒ポーリングでやろうぜ

現在時刻が開始〜終了時刻の範囲
 起動Flagなし
  起動処理
  起動Flag立てる
現在時刻が開始〜終了時刻の範囲外
 起動Flagあり
  終了処理
  起動Flag下ろす

(*゚∀゚)bできた!
2018/03/27(火) 22:29:48.19ID:FkzRU/Z7
回答者の方は基本情報持ってるもんですか?
2018/03/27(火) 23:11:24.08ID:a4CYTpTn
持ってるけど少し勉強すれば誰でも取れる資格に意味なんてあるの?
精々資格手当で給料が5000円プラスされる程度の価値しかないぞ
2018/03/27(火) 23:19:17.56ID:LCPGZ3qz
5000円の価値も分からないとか働いたことないのかな?
2018/03/27(火) 23:32:40.08ID:FNmJga7y
うちは1万増える
2018/03/27(火) 23:34:25.90ID:zFrY2ZyB
5,000円も上乗せとかウラヤマ過ぎだろ
うちなんて高度取っても報償金30,000円だけ
基本や応用ではなにもでない
2018/03/27(火) 23:42:52.53ID:7OwU1Hvz
10年以上やってる奴でも、基本情報技術者は取れない

大卒の新米が、こんなの簡単に取れますよねって言ったら、
中堅社員は皆、新米をにらみつけていたw

企業の資格取得率は、年1%(100人中1人)ぐらいだろ。
10年いても、9割の社員は、資格を取れない
2018/03/27(火) 23:53:23.07ID:FNmJga7y
申し込みしたけど忙しくて受験できない人は沢山居るけど受験して落ちる人はいない
2018/03/27(火) 23:53:50.72ID:3aWOhLkC
俺は応用情報まで持ってて+1万だなー

>10年以上やってる奴でも、基本情報技術者は取れない
……冗談だろ?
2018/03/27(火) 23:58:15.55ID:3aWOhLkC
さておき、建築士だの医師だの弁護士だのみたいに
「この職務に就くには、○○の資格が必要」とかいう業界じゃないんで
本当に、ただ給料が増えるだけではあるな (採用試験でもまあ有利にはなるかもしれん)

増えたら増えただけ嬉しいもんではあるが
年間で+12万なら、家電の買い替え費用くらい楽に捻出出来るし
2018/03/27(火) 23:58:26.75ID:9YSJ28+H
定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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