나는 점 구름 뷰어에서 일하고 있어요, 내 디자인은 두 개의 스레드 기반으로는더 빠른 스레드 블록 느린 스레드
- 첫 번째 스레드 (약 10 FPS)
- 초 스레드 포인트 클라우드 데이터를 업데이트 화면 (약 90 FPS)으로 설정 점을 렌더링하는 D3D 렌더러는
그래서 내 코드는 다음과 같습니다
std::shared_ptr<PointCloud> pointcloud;
CRITICAL_SECTION updateLock;
void FirstThreadProc()
{
while(true)
{
/* some algorithm processes point cloud, takes time */
EnterCriticalSection(&updateLock);
pointcloud->Update(data,length,...); //also takes time to copy and process
LeaveCriticalSection(&updateLock);
}
}
/*...*/
std::shared_ptr<D3DRenderer> renderer;
void SecondThreadProc()
{
MSG msg = { 0 };
while (WM_QUIT != msg.message)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
EnterCriticalSection(&updateLock);
renderer->Render(pointcloud);
LeaveCriticalSection(&updateLock);
}
}
}
두 번째 스레드가 첫 번째 스레드보다 훨씬 빠르다는 생각이 들었습니다. 따라서 첫 번째 스레드가 임계 영역에 들어가면 두 번째 스레드가 차단되므로 렌더러 창이 지금 또는 그 후에 고정되어야합니다. 하지만 지금 당장 볼 수있는 것은 렌더러 창이 매우 부드럽게 돌아가거나, 카메라가 회전하거나 확대/축소하는 것입니다.하지만 첫 번째 스레드는 매우 불안정합니다. fps는 10fps에서 1fps까지 다양합니다.
두 점 클라우드 버퍼에 대해 생각하고 있는데, 첫 번째 스레드는 중요한 섹션 외부를 벗어날 때 두 번째 버퍼를 업데이트 한 다음 중요한 섹션 내에서 두 개의 버퍼를 교체합니다. 작동할까요?
시도 할 때 무엇이 잘못 되었습니까? –
@KerrekSB 나는 그것을 얻지 못한다 ... – Clones1201
당신의 질문은 "Will it?" 답례로 제 질문은 당신이 왜 그렇게 믿지 않는지에 대한 이유입니다. –