2014-01-30 33 views
0

假设对象X是应该永远运行。 X在内部运行带有无限循环的线程,所以程序永远不会退出。要使用或不使用join()方法用的无限循环

我的问题是:这是一个很好的做法,把使用join()方法,在所有的,例如,在解构,否则会更有意义,这样做

int main() { 
    X myX; 
    while(1) { 
    } 
    return 0; 
} 

是这两种方法有什么不同?

+0

我认为这是不好的做法,认为程序能够或应该永远运行。我有硬件监控线程循环,但我有一个线程中止机制,所以我可以优雅地关闭。 –

+0

我认为假设程序可以或应该永远运行是错误的做法。 –

+1

为什么这样?在嵌入式应用中,大多数情况下都是这种情况。 – Bob

回答

1

有时是必需的,往往并非如此。如果你可以设计你的应用程序,那么它就会变得更好。

+0

感谢您的评论。当你说'有时它是必需的,有时不是'你指的是join()函数还是指向main()内部的while(1)? – Bob

1

你想打电话给join()如果需要等待运行,直到一个线程退出程序的某些部分。它还使线程对象可销毁,因此不会创建内存泄漏。尚未加入的线程就像僵尸进程和浪费资源。

+1

肯定,但对于嵌入式设备甚至是微控制器,是我见过的,而(1)经常“主”计划之内。因此,我的问题。 – Bob

+1

应用程序生存期线程并不总是(即很少),需要显式终止和清理。 –

+0

@chicks我的问题是关于线程本身永远不会结束的情况,因为应用程序应该永远运行。所以即使join()也会永远等待,不是吗? – Bob