【问题标题】:How do I make child thread exit when main thread exit?主线程退出时如何让子线程退出?
【发布时间】:2010-05-09 13:14:57
【问题描述】:
void forloop2()
{
    int i = 0;
    while(TRUE)
    {
        printf("forloop2\n");
    }
}

int main() {
    GThread          *Thread1;
    GtkWidget *window;
    g_thread_init(NULL);
    gdk_threads_init();
    gdk_threads_enter ();
    Thread1 = g_thread_create((GThreadFunc)forloop2, NULL, TRUE, NULL);
    gtk_init(NULL, NULL);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show_all (window);
    gtk_main();
    g_thread_join(Thread1);
    gdk_threads_leave ();
}

当我关闭窗口时,如何让Thread1也退出?

【问题讨论】:

    标签: c windows multithreading gtk


    【解决方案1】:

    清除 main 中 forloop2() 中的循环在每次迭代时检查的某些条件。当您想从 main 中退出时,设置该条件,然后在 Thread1 上调用 g_thread_join()。由于 forloop2() 会在看到该条件时进行检查,因此它将退出,使其加入,并且 main 将继续退出。

    【讨论】:

    • 是否可以制作一些主线程退出时自动退出的守护线程?
    • @httpinterpret 这取决于你在做什么的细节;你必须非常小心,不要让事情处于不一致的状态。 GThreadPool 或条件变量可能是您正在寻找的。您可能希望就您尝试多线程的内容提供一些高级细节,以便我们考虑一下。
    • 我发布的演示正是我正在做的。
    • 那么我建议你在while循环中添加一个检查来更新循环是否应该继续,或者函数应该退出。线程的重点是它们是异步的,因此您不一定能在任何给定点从另一个函数控制它们。
    • 不知道有没有类似kill PID的API
    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多