시간을 표시하는 응용 프로그램을 만들고 싶습니다 (궁극적으로 기존 스마트 미러 API를 사용하지 않고 간단한 스마트 미러를 해킹하려고합니다). UI 용 GTK3을 사용하고 있지만 UI 업데이트를 할 수있는 솔루션을 찾는 데 어려움을 겪고 있습니다 (프론트 엔드 나 GTK에서 경험하지 못했습니다).GTK의 인터페이스 업데이트
아래 보이는 view3 코드의 일부분에 루프를 배치 해 보았습니다 만, 일단 gtk_main()이 호출되면 gtk 기본 루프에서 빠져 나올 수 없으므로 while 루프가 시작되고 시간이 회수됩니다. 나는 썼다.
gtk_main_iteration_do (gtk_false()) (false가 차단되지 않도록)와 같은 함수를 사용해 보았지만 작동하지 않기 때문에이 함수에 대해 충분히 이해하지 못했습니다. gtk_main()을 루프 밖으로두면 분명히 gtk_main()이 호출되지 않고 응용 프로그램 창이 열리지 않습니다.
필자가 작성한 get_time_string() 함수의 정의와 관련하여 아래에 main에 관련 코드가 표시되어 있습니다. get_time_string의
int
main (int argc,
char *argv[])
{
// initialization and setting up window, packing widgets, etc
// view3
// populate buffer with time string
// and insert into text view
view3 = gtk_text_view_new();
gtk_widget_set_name(view3, "view3");
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view3));
gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
gtk_text_buffer_insert(buffer, &iter, get_time_string(), -1);
gtk_text_view_set_editable(GTK_TEXT_VIEW(view3), FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view3), FALSE);
// More widget packing, setting up UI
gtk_widget_show_all(window);
gtk_main();
return 0;
}
정의()
char* get_time_string(){
time_t time_var = time(NULL);
struct tm *info;
char *time_string = calloc(100, sizeof(char));
info = localtime(&time_var);
strftime(time_string, 100, "%I:%M %p", info);
return time_string;
}
Hey José, 당신은'get_time_string'에 할당 된 문자열의 메모리를 누출하고 있습니다. 또 다른 문제는'g_timeout_add_seconds'가 실제로 정확하지 않고 문서에''타이머의 첫 번째 호출이 1 초의 타임 아웃에 대해 정확하지 않을 수 있음을 명심하십시오 '입니다. 그래서 500ms 샘플링을 가진'g_timeout_add'는 같은 시간이 2 초 동안 표시되지 않도록해야합니다. – liberforce
@libforce 당신이 옳다, 나쁘다. 의견을 보내 주셔서 감사합니다. 모두 제일 좋다! –
de nada, tenhaum bom dia;) – liberforce