关于多线程中终止线程的问题
好像看windows程序设计里面说用_beginthread建立一个新进程之后,进程结束时可以不用_endthread,只要ThreadProc执行到了最后或者使用return返回了就会自动处理为这个线程分配的资源。
最近刚接触多线程,不知道各路大神平常是怎么用的啊?上面那样用会不会有内存泄露或者其他问题呀?
[解决办法]
只要ThreadProc执行到了最后或者使用return返回了就会自动处理为这个线程分配的资源。
这句话是对的。
你在线程函数中new出的内存,记得去delete就可以了。否则会内存泄露。
[解决办法]
建议是使用 _beginthreadex, 尽量不要使用 _beginthread
如果你在线程里面 new 了东西出来, 你还是得自己 delete. 不然就会泄露
[解决办法]
线程结束后线程的堆栈, 线程的局部存储这些肯定是自动回收了的. 但是如果线程的句柄还没有关闭的话, 还会维护一个线程的状态信息. 动态分配的资源不知你指的什么? 你 new 的内存不会自动 delete, 你打开的文件, socket 也不会自动关闭.
[解决办法]
需要注意的多个线程是共享进程资源的,如果线程退出前没有通知系统资源不再使用了,可能导致其他线程无法使用这些资源。
[解决办法]
进程结束会释放malloc、new等申请的内存,关闭打开的文件,打开的Socket,……。
《深入解析Windows操作系统-Windows Internals》之进程管理