티스토리 뷰




CVI는 사용자 인터페이스를 위한 다양한 컨트롤을 제공하고 있습니다. 다중 데이터에 대한 표현은 Graph, Chart 혹은 Table을 많이 사용하고 있습니다. Table에 데이터를 업데이트 하기 위한 방법(함수) 또한 여러개를 제공하고 있습니다. 각 셀마다 데이터를 업데이트 하게 되면 업데이트에 너무 많은 시간을 잡아먹게 됩니다. 업데이트에 시간이 많이 할당되면, 다른 기능이 제대로 동작하지 않을 수 있는 위험을 가지고 있습니다. 


이런 경우 개발자는 2가지 정도의 대안을 가질 수 있습니다.


  • 데이터 업데이트 하는 알고리즘을 다른 쓰레드에서 처리한다.
  • 데이터를 한번에 모아서 업데이트한다. 


다른 쓰레드에서 데이터 업데이트를 처리하게 되면, 데이터를 가지고 있는 배열 혹은 변수의 동기화를 고려해야 합니다. 이러한 부분은 프로그래밍 상에 추가적인 부하를 가져다 줄 수 있습니다. 따라서 2번째 방안으로 해결할 수 있다면 2번째 방법을 이용하는것이 효율적이라 할 수 있습니다. 



이 글에서는 2번 째 방안을 CVI에서는 어떻게 처리하는지 에 대해서 알아보고자 합니다. 이 방법을 위해서는 아래의 함수를 명확히 이해하고 있어야 합니다. 


int SetTableCellRangeVals (int panelHandle, int controlID, Rect cellRange, void *valueArray, int direction);


인자 정보 

panelHandle : LoadPanel이나 NewPanel을 통해서 로드된 Panel의 핸들 값

controlID : 처리하고자는 Table 컨트롤의 핸들 값

cellRange : 업데이트 하고자는 크기 지정

valueArray : 업데이트 하고자는 데이터가 들어간 배열

direction : 지정된 Range를 Row(VAL_ROW_MAJOR)순으로 업데이트 할지, Column(VAL_COLUMN_MAJOR) 순으로 업데이트 할지에 대한 결정 값


위의 함수에서 가장 중요하게 봐야 하는 인자는 cellRange와 virtualArray입니다. cellRange는 Rect 구조체로 이루어져 있습니다. 



Rect 구조체는 top, left, height, width의 값을 가지고 있으며, top, left는 업데이트를 위한 시작점을 height, width는 크기를 결정하는데 사용됩니다. 그리고 virtualArray는 데이터를 업데이트하기 위해 실제 데이터가 들어가 있는 배열을 의미합니다. 


그럼 코드를 살펴보도록 하겠습니다. 

코드는 아래와 같습니다. 


1) val 배열에 특정 값을 넣고, 2) Set Range Value가 눌러지면 SetTableCellRangeVals를 이용하여 (1,1) 부터 3행, 14열에 값을 전부 업데이트 합니다. 업데이트의 크기가 42개이므로, 배열의 크기도 반드시 42개로 동일한 값이어야 합니다. 



코드를 실행하면, 아래와 같이 Table의 값이 업데이트 되는 것을 확인 할 수 있습니다.  



이 글에서는 CVI의 컨트롤 중 하나인 Table에 데이터를 한번에 업데이트 하는 방법에 대해서 알아보았습니다.

위에서 사용된 예제를 첨부로 올려놓도록 하겠습니다. 


SetTableVals.zip


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글