C++ Builder XE4 > TTimer > 버스트 기능(가칭) 구현 > 1초 간격에 대해 0.1초 간격으로 처리
10077 단어 timerEventcppBuilderTTimer
C++ Builder XE4
처리 개요
구현안
코드 v0.1
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE で管理されるコンポーネント
TTimer *TMR_1sec;
TMemo *Memo1;
TButton *B_start;
TTimer *TMR_burst;
TCheckBox *CHK_burst;
void __fastcall TMR_1secTimer(TObject *Sender);
void __fastcall B_startClick(TObject *Sender);
void __fastcall TMR_burstTimer(TObject *Sender);
private: // ユーザー宣言
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*
@spec: 2018/03/08 TMR_burst->Tagをカウントダウンとして使う
*/
void __fastcall TForm1::TMR_1secTimer(TObject *Sender)
{
String wrk = Now().FormatString(L"hh:nn:ss.zzz");
Memo1->Lines->Add(wrk);
if (CHK_burst->Checked) {
TMR_1sec->Enabled = false; // 連射時は1秒タイマーは1回だけにする
TMR_burst->Interval = 100; // msec
TMR_burst->Tag = 10 - 1; // カウントダウン, 1: 実施済みの分
TMR_burst->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_startClick(TObject *Sender)
{
TMR_1sec->Interval = 1000; // msec
TMR_1sec->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TMR_burstTimer(TObject *Sender)
{
String wrk = Now().FormatString(L"hh:nn:ss.zzz");
Memo1->Lines->Add(wrk);
TMR_burst->Tag -= 1; // Tag:カウントダウン用
if (TMR_burst->Tag == 0) {
TMR_burst->Enabled = false;
}
}
//---------------------------------------------------------------------------
Memo1->Lines->Add(wrk);
처리는 함수화해, 2개소로부터 invoke 하는 것이 더 좋지만, 이 기사에서는 여기까지.UDP 통신이나 TCP/IP 통신의 경우, 상대로부터의 응답 시간도 있으므로, 100msec로 처리가 끝나지 않는 경우도 있다. 시험중인 장치에서 UDP 통신은 100msec에서 가능했다.
실행 예
버스트 모드에서 7of9 Powered by Qiita and Qiita users
( 동기 부여가 없을 때의 3 배 정도)
링크
버스트 모드는 소모가 심하기 때문에 장시간은 무리.
검색 키워드
Reference
이 문제에 관하여(C++ Builder XE4 > TTimer > 버스트 기능(가칭) 구현 > 1초 간격에 대해 0.1초 간격으로 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/45e97ede9d0bc6281939텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)