我正在尝试使用并行处理来编程显示列表。到目前为止,该程序在运行时错误上没有错误,但我在屏幕上看不到任何内容。我有一个名为DisplayList的函数。当我使用它而没有并行处理并从主要调用它时程序工作正常。但是通过并行处理,我看不到任何东西。
DWORD WINAPI DisplayList(LPVOID vpParam)
{
//Some really long code that works 100%
}
以下是main中的一些代码(CPU是我获得的核心数[4]):
GLuint* modelDL = new GLuint[totalMeshNum];
HANDLE *threads = new HANDLE[CPUs];
DWORD_PTR threadID = 0;
DWORD_PTR threadCore = 1;
int *displayListParam = new int[CPUs];
for (int i = 0; i < CPUs; i++)
{
displayListParam[i] = (totalMeshNum / CPUs) * i;
threadCore = 1 << i;
threads[i] = CreateThread(0, 0, DisplayList, &displayListParam[i], 0, &threadID);
SetThreadAffinityMask(threads[i], threadCore);
}
if (WaitForMultipleObjects(CPUs, threads, true, INFINITE) == WAIT_FAILED)
sendErrorMessage("Error - Model Loader \nWaiting all handels failed", true);
这是绘图功能:
void modelClass::drawModel()
{
glPushMatrix();
glTranslatef(position.x, position.y, position.z);
glScalef(size.x, size.y, size.z);
glRotatef(angle.x, 1, 0, 0);
glRotatef(angle.y, 0, 1, 0);
glRotatef(angle.z, 0, 0, 1);
glCallLists(totalMeshNum, GL_UNSIGNED_INT, modelDL);
glPopMatrix();
}
DisplayList功能真的很长,我确信问题不存在。我已经多次检查过这个功能是否有效。我没有使用任何锁,因为我没有任何全局变量。但是如果你需要它仍然让我知道。
变量modelDL已完全加载并获得了一些数据。所以我不明白这段代码有什么问题?