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.)