|
일단 눈에 보이는건...
void __fastcall TXXThread::Execute(void)
{
// 최초 버퍼 생성
New_Buf( );
while( !Terminated )
{
ReadValue = 채널로 부터 들어노는 integer 값 ;
// 버퍼에 저장
inbuf->ValueX[ inbuf->BufCount ] = ReadValue;
********inbuf->BufCount++ ; <==여기로 옮기거나 아니면 아래에서 499 로 비교하시던가...
// 버퍼가 다 채워졌으면
if( inbuf->BufCount >= 500 )
{
AddBufToList( inbuf ); // 리스트에 버퍼추가
New_Buf( ); // 새 버퍼 할당
***필요없는듯 함..inbuf->BufCount = 0; // 버퍼 인덱스 변수 0 으로 셋팅
}
}
****AddBufToList( inbuf );//마지막 꺼 리스트에 추가
}
초보탈출 님이 쓰신 글 :
: 안녕하세요.
: 고수님들께 여쭙니다.
:
: 아날로그 입력신호를 받는 하드웨어에서 초당 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++ ;
: }
: }
:
:
|