最近になって「優先順位が適用されてない」ことに気づきました…
優先順位は0.0~1.0までで0.0が一番最初に、1.0が一番最後に描画されるようにしたいです
Taskのメンバは
・m_pre,m_next:前に実行されるタスク・次に実行されるタスクのポインタ
・m_size:タスクのサイズ
・m_priority:優先度
使用している変数は
・g_buf:メモリ領域の先頭のポインタ
・m_count:タスクの数
・m_active:一番最初に実行されるタスクのポインタ
・m_free:タスクを追加できる未使用領域の先頭のポインタ
使用している定数は
MEM_SIZE:最初にまとめて確保したメモリの領域サイズ(byte)
以上だと思います
何が原因で優先度通りに並んでいないのか教えてください
void* Task::operator new(size_t size,float priority)
{
if(g_buf==NULL) return NULL; // タスクリストが初期化されていない
if(m_free+size >= g_buf+MEM_SIZE) return NULL; // 空き容量不足
g_size+=(DWORD)size;
g_count++;
Task *new_task=(Task*)m_free;
m_free+=size;
if(m_active==NULL) // 現在タスクリストは空
{
m_active=(BYTE*)new_task;
new_task->m_use = TRUE;
new_task->m_size = (DWORD)size;
new_task->m_pre = new_task;
new_task->m_next = new_task;
new_task->m_priority = priority;
return new_task;
}
// タスクリストに挿入する
Task *task,*next;
for(task=(Task*)m_active;task!=(Task*)m_active;task=next)
{
next=task->m_next;
if(priority > task->m_priority) // 同じ優先度なら末尾に挿入
{
if(task==(Task*)m_active) // 先頭に挿入
{
m_active=(BYTE*)new_task;
}
new_task->m_pre = task->m_pre;
new_task->m_next = task;
new_task->m_use = TRUE;
new_task->m_size = (DWORD)size;
new_task->m_priority = priority;
new_task->m_pre->m_next = new_task;
new_task->m_next->m_pre = new_task;
return new_task;
}
}
new_task->m_pre = task->m_next;
new_task->m_next = task->m_next->m_next;
new_task->m_use = TRUE;
new_task->m_size = (DWORD)size;
new_task->m_priority = priority;
new_task->m_pre->m_next = new_task;
new_task->m_next->m_pre = new_task;
return new_task;
}