|
안녕하세요.
고수님들께 여쭙니다.
아날로그 입력신호를 받는 하드웨어에서 초당 500개씩 정수형 값들이 들어오는데
입력을 받기시작해서 끝날때까지는 약 2~10분 정도 걸립니다.
들어오는 값들을 1초 단위로 끊어서 저장을 해야되는데 입력을 받기 시작해서 끝나는
시점을 알수가 없기때문에 메모리를 동적으로 할당을 해야될것 같아서 아래와 같이
TList 를 이용하여 무식한 방법으로 코딩해 봤습니다.
그런데 컴파일 할때는 에러가 없는데 실행시엔 몇초안가 다운이 되버리네요. ㅠㅠ
고수님들 부디 해결방법을 부탁 드립니다. --;
// 초당 500 개씩 들어오는 정수값들을 저장하기 위한 클래스
/***************** BufferManage.h ***********************/
#define BUF_LENGTH 500
class TBufManage
{
public:
__fastcall TBufManage( void );
int BufCount; // 버퍼에 저장되는 값들을 인덱싱 하기위한 변수
int ValueX[ BUF_LENGTH ]; //저장될 버퍼
};
// 클래스 구현 cpp 파일
/***************** BufferManage.cpp ***********************/
#include "BufferManage.h"
// 생성자
__fastcall TBufManage::TBufManage( void )
{
BufCount = 0;
}
// 스레드 관련 cpp 파일
/***************** BufThread.cpp ***********************/
TList * BufList;
TBufManage *inbuf;
...
BufList = new TList;
...
void New_Buf( void )
{
inbuf = new TBufManage();
}
void AddBufToList( TBufManage * buf )
{
BufList->Add( buf );
}
// 스레드의 동작함수
void __fastcall TXXThread::Execute(void)
{
// 최초 버퍼 생성
New_Buf( );
while( !Terminated )
{
ReadValue = 채널로 부터 들어노는 integer 값 ;
// 버퍼에 저장
inbuf->ValueX[ inbuf->BufCount ] = ReadValue;
// 버퍼가 다 채워졌으면
if( inbuf->BufCount >= 500 )
{
AddBufToList( inbuf ); // 리스트에 버퍼추가
New_Buf( ); // 새 버퍼 할당
inbuf->BufCount = 0; // 버퍼 인덱스 변수 0 으로 셋팅
}
inbuf->BufCount++ ;
}
}
|