创建一个Glade窗口的多个实例

时间:2017-04-13 10:54:38

标签: c pthreads gtk gtk3 glade

我正在运行多个线程,需要在每个线程中创建同一窗口的副本。每一个都是与线程正在做什么相关的显示值(在这种情况下计算素数)。

#include "stress.h"

//------------------------------
void windowUpdate(int *ptr) {
//------------------------------
    GtkLabel        *lbl_thread;
    GtkLabel        *lbl_total;
    GtkLabel        *lbl_latest;

    lbl_thread = GTK_LABEL(gtk_builder_get_object(stressBuilder, "lbl_thread"));

    char buffer[512];

    sprintf(buffer, "%i", ptr);
    gtk_label_set_text(lbl_thread, buffer);
}

//------------------------------
void windowCreate() {
//------------------------------
    //This is where the window instance code will eventually live
}


//------------------------------
void prime(int *ptr) {
//------------------------------
    int i = 3, count, c;
    const int n = INT_MAX;

   if ( n >= 1 ) {
        printf("First %d prime numbers are :\n",n);
        printf("2\n");
   }

   for ( count = 2 ; count <= n ;  ) {
      for ( c = 2 ; c <= i - 1 ; c++ ) {
         if ( i%c == 0 )
            break;
      }
      if ( c == i ) {
        printf("Thread %i: %d\n", ptr, i);
        count++;
      }
      i++;
   }
}

//------------------------------
void debugMesg(int *ptr) {
//------------------------------
    printf("A thread with ID: %i was created\n", ptr);
    windowUpdate(ptr);  
    prime(ptr);

}

//------------------------------
void genThreads(GtkBuilder *builder, int threads) {
//------------------------------
    XInitThreads();
    stressBuilder = builder;    //points to the builder used in main()

//------------------------------
    GtkWidget       *winStress;     
//------------------------------

    winStress = GTK_WIDGET(gtk_builder_get_object(stressBuilder, "win_thread"));
    gtk_widget_queue_draw(winStress);
    gtk_widget_show(winStress);

    int proc[threads];
    pthread_t prime[threads];
    char* id;

    for(int i = 0; i < threads; i++) {
        id = (char) i;
        proc[i] = pthread_create(&prime[i], NULL, debugMesg, (int *) id);
    }
}

genThreads()是创建线程的函数。它还暂时负责显示 win_thread 窗口。 windowUpdate()函数需要能够改变与其运行的线程对应的窗口实例的值。

我使用线程btw相当新,以防万一我发现任何菜鸟错误。

整个程序在这里发布有点长,所以这里有一个指向repo的链接,以防您想要查看 main()压力。 h 或其他什么。

谢谢大家:D

0 个答案:

没有答案