Probleme d'affichage

Résolu
khamine Messages postés 27 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 2 septembre 2005 - 29 août 2005 à 11:01
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 août 2005 à 17:10
Salut tout le monde;
j'ai une question a la quelle j'ai pas pu trouver de reponse, ben , pour quoi si on lanse un long traitement sur VC6 (par exemple avec un click sur un button) tous les autres controles se bloquent, et pire que cela le dialog deviens illisible, je veux pas etuliser les threades mais si qlq1 a une solution pour rendre la fenetre lisible meme s'elle est inactive.

Mercie pour tous.

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 17:10
Je mets dans WinMain() pour initialiser COM en multithread sinon tu mets CoInitialize(NULL) au début du thread.

Ce que fait le thread peu importe, j'ai juste mis le début pour montrer comment initialiser les pointeurs ADO, ensuite tout s'emploie normalement comme dans mes exemples ADO en source sur cppfrance.

ciao...
BruNews, MVP VC++
3
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
29 août 2005 à 11:06
???, moi sa ne mais jamais arriver ce problème, montre nius ton code
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 11:17
Un long traitement se met dans un thread séparé.

ciao...
BruNews, MVP VC++
0
khamine Messages postés 27 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 2 septembre 2005
29 août 2005 à 11:56
oui c'est vrais c'est un trés long traitement mais le probleme avec les threads c'est que j'arrive pas a me connecter a une BD dans le thread ni avec ADO ni DAO (ODBC jamais essayé)

Merci pour tous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 12:30
J'avais déjà répondu à cela il y a peu.

dans WinMain:
if(S_OK != CoInitializeEx(NULL, COINIT_MULTITHREADED)) return 0;

dans bouton, exemple issu de mon taf:
hthread = CreateThread(0, 0, MdbStructThread,...);

DWORD WINAPI MdbStructThread(PVOID pvPrm)
{
ExtractStructDB((LPANALYDATA)pvPrm);
PostMessage(((LPANALYDATA) pvPrm)->hDlg, WM_ANALYSEND, 0, 0);
return 0;
}
void ExtractStructDB(LPANALYDATA pData)
{
DWORD dwWrite;
_ConnectionPtr pConnDB = NULL;
_RecordsetPtr pRs, pSchemaRs;
FieldPtr pFld;
long i, nFlds, lType, bRet = 1;
_bstr_t bst("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
_variant_t varIdx;
bst += pData->szMdb;
if(pData->szPsswrd[0]) {bst += ";Jet OLEDB:Database Password="; bst += pData->szPsswrd;}
try {
TESTHR(pConnDB.CreateInstance(__uuidof(Connection)));
TESTHR(pRs.CreateInstance(__uuidof(Recordset)));
pConnDB->Mode = adModeShareExclusive;
pConnDB->Open(bst, "", "", NULL);
}
catch(_com_error &e) {MsgAdoError(pData->hDlg, e); return;}

ETC......
}

et voilà ADO en thread et va impec.

ciao...
BruNews, MVP VC++
0
khamine Messages postés 27 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 2 septembre 2005
29 août 2005 à 16:37
est ce que tu peux m'expliquer ton thread fait quoi et pour quoi la condition if dans winmain qui return 0.
Merci.
0
Rejoignez-nous