CreateCompatibleDC retourne 0
Bonjour,
J'ai fais un serveur d'image que l'on interroge par TCP pour récupérer l'image.
Le client envoie une requête, le serveur génère l'image et l'envoie au client.
Pour mes tests, je stresse le serveur en envoyant des requêtes toutes les 200 ms, sachant que le serveur n'a pas le temps de générer l'image en 200 ms.
J'ai une pile d'attente qui gère ce point.
J'en viens à mon problème.
Pour générer l'image, j'utilise un double buffer, pour éviter le flicking.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
CDC dcMem;
CBitmap *pOldBitmap;
dcMem.CreateCompatibleDC(pDC);
pOldBitmap = dcMem.SelectObject(&m_bMap);
// Set brush to desired background color.
CBrush backBrush(RGB(169, 230, 252));
// Save old brush.
CBrush* pOldBrush;
pOldBrush = dcMem.SelectObject(&backBrush);
CRect rect;
dcMem.GetClipBox(&rect); // Erase the area needed.
dcMem.PatBlt(rect.left, rect.top, rect.Width(),rect.Height(), PATCOPY);
dcMem.SelectObject(pOldBrush);
dcMem.SelectObject(pOldBitmap);
dcMem.DeleteDC();
return TRUE;
//return CWnd::OnEraseBkgnd(pDC);
} |
Cette fonction permet de remettre un fond bleu à mon image à chaque fois.
Je lance mon application avec 2 clients et un serveur, et au bout d'un moment (très variable),
j'ai une erreur sur le CreateCompatibleDC qui me met le dcMem à NULL.
J'ai aussi testé le booléen de retour qui est à 0 (donc erreur), mais étonnement quand je regarde la valeur du GetLastError, j'ai 0 ce qui signifie, pas d'erreur !!!!
Je ne comprends plus rien.
Merci de votre aide.