Mam w programie podwójnie buforowany IDirectDrawSurface (lpDDSPrimary i lpDDSBack). Główny wątek programu odpowiedzialny jest za Flip'owanie powierzchni timerem (interval=20 czyli mniej wiecej [raczej mniej niż wiecej ;)] 50 FPS ) obsługując WM_TIMER w pętli komunikatów.
Tworzonych jest również wiele wątków pobocznych, każdy z nich co jakiś krótki czas bedzie używać IDirectDrawSurface do rysowania czegośtam na lpDDSBack używając metody dostępu IDirectDrawSurface::GetDC.
GetDC zakłada lock na powierzchnie wchodząc w sekcje krytyczną Win16 lock (MSDN), a ilość wątków może być bardzo duża, zatem na lpDDSBack bedzie często założony lock.
I teraz nie wiem jak sie zachowa lpDDSPrimary->Flip w głównym wątku, gdy na lpDDSBack bedzie założony lock. Czy lock mu przeszkodzi w flip'owaniu ? Jeśli tak, to czy Flip z flagą DDFLIP_WAIT poczeka, aż lpDDSBack bedzie wolny ?
Chodzi mi o to czy częsty lock na lpDDSBack spowoduje spadek FPS, i jeśli tak, to jak sie przed tym uchronić ? Czy da sie uzyskać taki efekt, że gdy na lpDDSBack założony jest lock przez któryś z wąteków pobocznych, a wątek głowny chce wykonać Flip, to poczeka on aż lock zostanie zwolniony przez wątek poboczny i od razu uzyska dostep do lpDDSBack, po czym po wykonanym Flip'ie zezwoli na założenie lock'a kolejnemu czekającemu wątkowi ?