HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0728
E235-0現在時刻がOO秒前になったら4未解決


E235-0

リンク

2018/7/28(Sat) 15:47:50|NO.84869

ATOSを自作しているものです。
現在時刻の~~秒前になったら何かできる用にしたいのですが、
できません。
教えてください。

あと、
数字だけの文字型変数を整数の変数にしたいです。



この記事に返信する


あらや

リンク

2018/7/28(Sat) 17:26:26|NO.84870

>現在時刻の~~秒前になったら
現在より前の話なのに「なったら」という未来の話になっていて
ちょっと意味がわからないのですが、
「設定した時刻の~~秒前」という意味だと解釈させていただきます。

何が出来ないのか細かい所がわかりませんが
とりあえず、簡単にAPIのtimeGetTime関数を利用して10秒カウントするソースを作ってみました。

#uselib "winmm.dll" #func timeGetTime "timeGetTime" start_time = timeGetTime(); // 開始時間の取得(ms) end_time = start_time + 10000; // 終了時間の設定(10秒後) repeat time = end_time - timeGetTime(); // 残り時間の算出 if( time <= 0 ): break; // 残り時間が0になったらループを抜ける time_s = time / 1000; // ミリ秒を秒に変換 time_ms = time \ 1000; redraw 0; color 255, 255, 255: boxf; color 0, 0, 0: pos 0, 0; mes strf("%d.%03d秒前", time_s, time_ms); redraw 1; await 1; loop dialog "終了"; stop;


ほかにも標準関数のgettimeを使う方法もありますし、
WM_TIMERを利用する方法もあります。

『現在の時間』と『設定した時間』までの差が〇秒になったら何かをするという処理は
ifを使えば簡単に出来ます。



そして文字を数値にするのはintを使うだけで出来ます。

a = "123"; // 文字列 b = int(a); // 整数値型に変換 c = b + 1111; // 適当な計算 mes a; mes b mes c;



E235-0

リンク

2018/7/28(Sat) 18:46:23|NO.84871

あらやさん

ありがとうございます。
自分でも読み返したところ、
確かに意味がわからんことになっていました。
私が言いたいのは、「指定した時刻の~~秒前になったら~~する」
でした。



科学太郎

リンク

2018/7/28(Sat) 20:30:43|NO.84873

> 私が言いたいのは、「指定した時刻の~~秒前になったら~~する」
これは、アラーム機能の事ですか?

もしも、そうであればアラーム設定時刻の○○秒前の警告用の時刻も自動的に設定します。
そして、警告用の時刻をWM_TIMERメッセージ内でチェックして、
画面に「○○する」というメッセージを表示すれば良いでしょうね。



あらや

リンク

2018/7/28(Sat) 21:38:23|NO.84874

非常にざっくりですが、WM_TIMERを利用したソースです。

#uselib "user32.dll" #func SetTimer "SetTimer" int, int, int, int #func KillTimer "KillTimer" int, int #define WM_TIMER 0x0113 oncmd gosub *alarm, WM_TIMER; // WM_TIMERの割り込み onexit goto *quit; // 終了時処理 // 指定時刻の設定(とりあえず23時0分12秒) E_H = 23; // 時 E_M = 0; // 分 E_S = 12; // 秒 E_Time = E_H*3600 + E_M*60 + E_S; // 時刻を秒に換算 // ○秒前の設定(とりあえず10秒前) B_Time = 10; // 現在時刻の取得や指定時刻までの秒数算出 gosub *get_now_time; SetTimer hWnd, 1, 1000, 0; // タイマーのセット(1000ミリ秒間隔) // 待機ループ *main redraw 0; color 255, 255, 255: boxf; color 0, 0, 0: pos 0, 0; mes strf("指定時刻\t%02d:%02d:%02d", E_H, E_M, E_S); mes strf("現在時刻\t%02d:%02d:%02d", gettime(4), gettime(5), gettime(6)); mes "指定時刻まであと "+L_Time+"秒" redraw 1; await 17; if( A_flag == 2 ): stop; goto *main; // 現在時刻の取得など *get_now_time // 開始時刻の取得 S_H = gettime(4); // 時 S_M = gettime(5); // 分 S_S = gettime(6); // 秒 S_Time = S_H*3600 + S_M*60 + S_S; // 時刻を秒に換算 if( E_Time < S_Time ) { // もしすでに指定時刻を過ぎていた場合は、次の日の時刻までの秒数を算出する L_Time = E_Time + 86400 - S_Time; } else { // まだ指定時刻になっていない場合は、指定時刻までの秒数を算出 L_Time = E_Time - S_Time; } A_Time = L_Time - B_Time; // // ○秒前になるまでの秒数を算出 if( A_Time < 0 ) { // もし○秒前が現在時刻よりも前ならばスキップ A_flag = 1; } else { A_flag = 0; } return; // タイマー割り込み *alarm gosub *get_now_time; if( A_flag == 0 ) { if( A_Time == 0 ) { dialog ""+B_Time+"秒前"; } } else:if( A_flag == 1 ) { if( L_Time == 0 ) { dialog "指定した時刻になりました。"; KillTimer hWnd, 1; // タイマーの破棄 A_flag = 2; } } return; // 終了時処理 *quit if( A_flag != 2 ) { KillTimer hWnd, 1; // タイマーの破棄 } end;


日付などまで必要でしたらこれらの過去ログも参考にしてください。
http://hsp.tv/play/pforum.php?mode=all&num=84288
http://hsp.tv/play/pforum.php?mode=all&num=84326



ONION software Copyright 1997-2023(c) All rights reserved.