Не знаю как сделать список для программы просмотра игровых серверов. Следующий вариант его реализации подсмотрел в программе xqf (http://www.linuxgames.com/xqf/index.shtml). Но список должен обновляться через некоторые промежутки времени, а в данной реализации происходят разные ошибки выполнения.
#include <iostream>
#include <gtk/gtk.h>
char titles[][30+1] = {"First","Second"};
GtkWidget* store;
pthread_mutex_t* mutex;
void m(int);
void* tick_temp(void*);
int main(int argc, char** argv)
{
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size ( GTK_WINDOW(window), 600, 400);
int sz=2;
store = gtk_clist_new (sz);
GTK_CLIST_SET_FLAG (GTK_CLIST (store), CLIST_SHOW_TITLES);
GtkWidget* label,*alignment;
for (int i=0; i<sz; i++)
{
alignment = gtk_alignment_new (0.0, 0.5, 0.0, 0.0);
label = gtk_label_new (titles[i]);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
gtk_container_add (GTK_CONTAINER (alignment), label);
gtk_widget_show (label);
gtk_clist_set_column_widget (GTK_CLIST (store), i, alignment);
gtk_clist_set_column_width(GTK_CLIST (store), i, 151);
gtk_widget_show (alignment);
}
GtkWidget* container = gtk_vbox_new(0,0);
gtk_box_pack_end(GTK_BOX(container), store, 0, 0, 0);
label = gtk_label_new ("UGABUGA!!!");
gtk_box_pack_start(GTK_BOX(container), label, 0, 0, 0);
gtk_container_add(GTK_CONTAINER(window), container);
gtk_widget_show_all(window);
struct sigaction act;
act.sa_handler = m;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGUSR1,&act,NULL);
pthread_t thread;
mutex = new pthread_mutex_t();
pthread_mutex_init(mutex, NULL);
pthread_mutex_lock(mutex);
int res = pthread_create(&thread, NULL, tick_temp, NULL);
pthread_mutex_unlock(mutex);
gtk_main();
delete mutex;
return 0;
}
void* tick_temp(void*)
{
int notfirst=0;
while (1)
{
pthread_mutex_lock(mutex);
if(!notfirst++) sleep(0.3);
kill(getpid(),SIGUSR1);
pthread_mutex_unlock(mutex);
sleep(1);
}
}
void m(int)
{
pthread_mutex_lock(mutex);
int sz=2;
char** text;
text = new char*[sz];
static int count = 0;
gtk_clist_clear (GTK_CLIST (store));
int sts = 8;
for (int i=0; i<sts; i++)
{
count++;
text[0] = new char[50]; text[1] = new char[50];
sprintf(text[0],"What the fuck!?");
sprintf(text[1],"%d",count);
gtk_clist_insert(GTK_CLIST (store),i,text);
}
pthread_mutex_unlock(mutex);
}