WINCE中创建线程竟失败?好奇怪,帮帮我!
我在WINCE中会 <<<频繁>>> 使用AfxBeginThread创建工作线程,这个线程没有任何循环,运行完成后会<<安全>>退出,并且在线程中的资源均已释放。
但在某一时刻,使用AfxBeginThread创建线程会返回NULL。就像这样: CWinThread* m_lpThread = AfxBeginThread(MyThread, NULL, 0);
结果是:m_lpThread == NULL;
得出的错误号是8,查了一下为:存储空间不足,无法处理此命令。
这里所说的存储空间是指啥呢?
怎么办啊?大家有没有遇到过呢?我真的很急,知道这儿有很多高手,求大家帮帮我!谢谢!
[解决办法]
可能你在某一时间同时存在的线程太多了。
导致进程中的空间被消耗完了。
你的“安全”退出可能不安全,你能保证线程中不会有内存泄露或线程crash,或 block。
每个线程建立后最好在某个地方有检查该线程是否真的退出的机制。
[解决办法]
线程退出有时候会很慢的,如果你没有安全的退出,就会导致系统很慢.检查一下是否存在线程没有退出来.
[解决办法]
“完成工作后就会立即退出的”
就算是这样的线程在重复建立时也需要检查一下上一个线程有没有退出,如果没有退出则强行终止。
这个是一种安全机制。
还有确保线程资源释放。可以使用_finaly 等机制来保证。
还有线程是否会用到共享资源?如果有,加入同步机制。
多线程的安全是靠多种安全机制来保证的,不是自己觉得线程内部处理很简单就会安全的。
如果你加入安全检查和同步后,还是有问题,
那么只能把线程的代码贴出来了。