GTK에는 glib가 포함됩니다. glib는 gtk와 다른 많은 gobject 라이브러리가 사용하는 핵심 알고리즘 및 데이터 구조 라이브러리입니다. glib는 mainloop에서 호출 할 함수를 제공합니다. glib는 gtk를 포함 할 때 포함됩니다.
GSList* List; //This is a singly linked list provided by glib as well.
g_timeout_add_seconds(1, YourCallBack, List);
g_timeout_add하는 첫 번째 인수는 다음과 같습니다
당신은 다른 사람이 함수를 등록 할 가지고 GSourceFunc에 대한 서명이 어딘가에 gboolean (*GSourceFunc) (gpointer user_data);
gboolean YourCallBack(void* data)
{
GSList list = (GSList*) data;
// Check your list
return TRUE; // return FALSE to remove the timeout
}
하는 콜백으로 GSourceFunc이 필요합니다 두 번째는 GSourceFunc (콜백 함수)에 대한 포인터이고 세 번째 인수는 콜백 함수에 전달할 데이터에 대한 포인터입니다.
편집 GSlist는 목록이 변경 될 수 있기 때문에 일반적으로 포인터는 목록의 노드 중 하나 (첫 번째)에 대한 포인터이며, 노드는 목록에서 앞에 붙거나 제거 될 수 있습니다. 이것은 위험합니다. 이 예제에서는 g_timeout_add_seconds를 사용하는 방법을 보여 주지만 목록에 액세스하려면보다 안전한 방법이 필요하다. 그러나 이것은 g_timeout_add_x 계열의 함수를 사용하는 방법을 보여줍니다.
편집 : g_timeout_add를 사용하여 초보다 작은 간격으로 콜백을 지정할 수 있지만 그러한 정밀도가 필요하지 않은 경우 g_timeout_add_seconds는 더 적은 리소스를 사용합니다.
자세한 내용은 https://developer.gnome.org/glib/2.42/glib-The-Main-Event-Loop.html#g-timeout-add을 참조하십시오.
새로운 정보의 출처 및 방법은 무엇입니까? –
변경 사항에 대한 링크 된 목록 폴링은 UI 프로그래밍 기술 측면에서 끔찍한 것으로 들립니다. 데이터 모델의 코드를 제어 할 수있는 경우 목록의 항목이 변경되면 알림 콜백을 사용하여 UI를 업데이트하십시오. –
나는 컨트롤을 가지고 있지만 일반적으로 gui에 대한 호출과 함께 원래 코드를 'polute'하고 싶지 않습니다. –