C++ Builder XE4, 10.2 Tokyo > Form1: 항목 추가 + Form2: 추가 항목 검색 > TStringList 구현
10279 단어 fileIOcppBuilderFIFOshiftRegister
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/05)
처리
양식 구성
code
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Timer1->Enabled = false;
Timer1->Interval = 200; // msec
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int idx = 0;
Form2->AddItem(IntToStr(idx));
idx++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
Unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
m_itemList = new TStringList();
Timer1->Enabled = false;
Timer1->Interval = 1000; // msec
Timer1->Enabled = true;
}
__fastcall TForm2::~TForm2()
{
delete m_itemList;
m_itemList = NULL;
}
void __fastcall TForm2::AddItem(String item)
{
m_itemList->Add(item);
}
//---------------------------------------------------------------------------
static const int kNumExtract = 5; // 取出す項目数
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
if (m_itemList->Count < kNumExtract) {
return;
}
// TODO:資源のロック開始
String item = L"";
for(int idx=0; idx < kNumExtract; idx++) {
item = item + L"," + m_itemList->Strings[idx];
}
for(int loop=0; loop < kNumExtract; loop++) {
m_itemList->Delete(0);
}
// TODO:資源のロック解除
String msg = item + L" @ " + Now().FormatString(L"yyyy/mm/dd hh:nn:ss.zzz");
Memo1->Lines->Add(msg);
}
//---------------------------------------------------------------------------
결과
5개의 항목 표시가 1014msec마다 실시되고 있다.
자원 잠금
Form2의 Timer 처리중에 Form1로부터 AddItem()은 문제 없을까.
Mutex나 CriticalSection등을 검토하고 있었지만, 아래의 조사에서는 기대한 것 같은 락 동작은 되지 않았다.
htps : // m / 7, f9 / ms / e b3, 7f2bd19, 892c2b20
비고
폼이 아닌 TThread로 구현하면, thread의 우선도를 설정할 수 있다.
다만, TThread로 실장해도 락이 걸리는 타이밍은 기대한 것이 아니었다.
Reference
이 문제에 관하여(C++ Builder XE4, 10.2 Tokyo > Form1: 항목 추가 + Form2: 추가 항목 검색 > TStringList 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/e41ad588d3c15ed3c945텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)