

プログラム初学者です。  
Visual Studio 2019を用いてC#で機械学習のためのデータを取るプログラムを作っています。

### やりたいこと

for文を回しiの値によってファイル名を変える。  
一秒ごとに各種パラーメーターをtxtに出力する。

### 問題点

現状データが取得出来てはいるが、データが一秒ごとに取得できず、秒数がとびとびになっている。  
値を一秒ごとに取得する方法をご教授ください。

### 試したこと

for文の中身を60以外に変更しても一秒に一回データを取ることができなかった。

### 現状のコード

[code]

        string fileName;
        for (int i = 0; i < 60; i++)
        {
            if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION) != 0)
            {
                if (i == 0)
                {
                    SystemSounds.Beep.Play();
                    fileName = fileNameFolder + "data0.txt";
                }
                else if (i <= 21)
                {
                    fileName = fileNameFolder + "data1to21.txt";
                }
                else if (i == 22)
                {
                    SystemSounds.Beep.Play();
                    fileName = fileNameFolder + "data22.txt";
                }
                else if (i <= 52)
                {
                    fileName = fileNameFolder + "data23to43.txt";
                }
                else if (i == 44)
                {
                    SystemSounds.Beep.Play();
                    fileName = fileNameFolder + "data44.txt";
                }
                else
                {
                    fileName = fileNameFolder + "data45to60.txt";
                }
    
                using (StreamWriter filewrite000 = new StreamWriter(fileName, true))
                {
                    attention = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION);
                    meditation = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_MEDITATION);
                    delta = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_DELTA);
                    theta = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_THETA);
                    lowalpha = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA1);
                    highalpha = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA2);
                    lowbeta = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_BETA1);
                    highbeta = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_BETA2);
                    lowgamma = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA1);
                    highgamma = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA2);
                    DateTime dt = DateTime.Now;
    
                    filewrite000.Write(attention + ", " + meditation + ", " + delta + ", " + theta + ", " + lowalpha + ", " + highalpha + ", " + lowbeta + ", " + highbeta + ", " + lowgamma + ", " + highgamma + ", " + dt.ToString() + ", " + state+"\n");
                    Console.WriteLine(" ATTENTION: MEDITATION: STATE: DELTA: THETA: LOWALPHA: HIGHALPHA: LOWBETA: HIGHBETA: LOWGAMMA: HIGHGAMMA: " + attention, +meditation, +state, +delta, +theta, +lowalpha, +highalpha, +lowbeta, +highbeta, +lowgamma, +highgamma, dt.ToString());
                }
            }
    
            if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0)
            {
                if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) != 0)
                {
                    Console.WriteLine(" Find Filter Type: " + NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) + " index: " + packetsRead);
                    //break;//実装//
                }
    
                /* Get and print out the updated raw value */
                NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW);
    
                packetsRead++;
                if (packetsRead == 800 || packetsRead == 1600) // call twice interval than 1s (512)
                {
                    errCode = NativeThinkgear.MWM15_getFilterType(connectionID);
                    Console.WriteLine(" MWM15_getFilterType called: " + errCode);
                }
            }
        }
    
[/code]


CC BY-SA 4.0
2021-10-22T12:28:06.530
83220
2021-10-22T17:34:47.290
2021-10-22T16:35:24.197
3060
48762
question
c#
for文を用いたDate.Nowの時間処理


普通は、.NETの定周期処理はタイマークラスを使います。  
タイマークラスも何種類かありますが、[System.Timers.Timer](https://docs.microsoft.com/ja-
jp/dotnet/api/system.timers.timer?view=net-5.0)が無難だと思います。  
[タイマにより一定時間間隔で処理を行うには？（サーバベースタイマ編）](https://atmarkit.itmedia.co.jp/ait/articles/0511/11/news119.html)

提示されているソースで使用されているクラス、メソッドがどういったものか不明で、何の説明も記載されていない為、何をやってるのかさっぱり判りませんが、とびとびになっているということは、処理に1秒より多く掛かってるんじゃないですか？  
[Stopwatchクラス](https://docs.microsoft.com/ja-
jp/dotnet/api/system.diagnostics.stopwatch?view=net-5.0)で、各処理に掛かっている時間を計測してみてください。


CC BY-SA 4.0
2021-10-22T17:05:05.013
83223
2021-10-22T17:34:47.290
2021-10-22T17:34:47.290
41943
41943
83220
answer