我需要动态创建一个线程,用于定时给一个消息队列发送消息。
其中DelayTime是时间间隔,Idx是一个标号。
如果收到新的命令(在CMD中),则会执行下面这断代码,先检查是否已经创建了这个线程,如果有就先删除。
然后判断命令是否符合要求,从命令中取得时间间隔和标号,重新创建线程。
if (ctt_thread != RT_NULL)
rt_thread_delete(ctt_thread);
if (rt_strlen(CMD+j)>0)
{
SSS.DelayTime=atoi(CMD+j);
SSS.Idx=Curdx;
ctt_thread = rt_thread_create("CTT",rt_thread_entry_ctt, RT_NULL,
256,24,100);
if (ctt_thread != RT_NULL)
rt_thread_startup(ctt_thread);
}
现在奇怪的是,在其他线程都是静态线程和静态变量时,ctt_thread = rt_thread_create()有时能成功,有时不能成功,跟踪进去,发现是 stack_start = (void*)rt_malloc(stack_size);
有时能申请成功,有时申请不成功,这是怎么回事?而且256也不算大,我的可用内存都在2K以上
手上太忙,也没空深入进去研究了,是内存回收机制?还是优先级问题?
我需要动态创建一个线程,用于定时给一个消息队列发送消息。
其中DelayTime是时间间隔,Idx是一个标号。
如果收到新的命令(在CMD中),则会执行下面这断代码,先检查是否已经创建了这个线程,如果有就先删除。
然后判断命令是否符合要求,从命令中取得时间间隔和标号,重新创建线程。
if (ctt_thread != RT_NULL)
rt_thread_delete(ctt_thread);
if (rt_strlen(CMD+j)>0)
{
SSS.DelayTime=atoi(CMD+j);
SSS.Idx=Curdx;
ctt_thread = rt_thread_create("CTT",rt_thread_entry_ctt, RT_NULL,
256,24,100);
if (ctt_thread != RT_NULL)
rt_thread_startup(ctt_thread);
}
现在奇怪的是,在其他线程都是静态线程和静态变量时,ctt_thread = rt_thread_create()有时能成功,有时不能成功,跟踪进去,发现是 stack_start = (void*)rt_malloc(stack_size);
有时能申请成功,有时申请不成功,这是怎么回事?而且256也不算大,我的可用内存都在2K以上
手上太忙,也没空深入进去研究了,是内存回收机制?还是优先级问题?
举报