Poslao: 04 Nov 2005 21:28
|
offline
- cuoea
- Novi MyCity građanin
- Pridružio: 12 Apr 2005
- Poruke: 6
|
Pozdrav svima.
Zna li neko za biblioteku koja implementira pristup MS Sql Serveru, a da nije ODBC zasnovana.
Probao sam ADO kroz objekte iz C++ Buildera, ali se ne ponasaju lepo u multi-threaded okruzenju (pretpostavljam zbog cele sarade sa VCL-om).
Ako nista drugo, uvek mogu da koristim izvorne ADO objekte, ali nisam bas odusevljen tom idejom. BCB ima prilicno problema sa #import naredbom.
Sve primedbe su dobrodosle:)
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 05 Nov 2005 16:36
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
a da koristis ADO u CriticalSection?
onda ne moze da brlja...
|
|
|
|
Poslao: 07 Nov 2005 13:16
|
offline
- cuoea
- Novi MyCity građanin
- Pridružio: 12 Apr 2005
- Poruke: 6
|
Hvala na savetu. Ipak mi nije potrebna niti implementacija kriticnih sekcija, niti druga biblioteka.
Tvoj savet me je naveo da jos jednom pogledam kako sam zapravo koristio originalne objekte, i onda sam video da nisam probao drugi nacin upotrebe interfejsa koji mi je dat (a bio sam ubedjen da sam to vec uradio i da nije 'telo).
U svakom slucaju, puno ti hvala na "okidacu".
|
|
|
|
Poslao: 07 Nov 2005 13:46
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
a tu nije nikakva posebna implementacija potrebna, svega 4 funkcije uvodis za CS - registrovanje/odregistrovanje CS-a, i ulaz/izlaz u CS...
evo ti moja gotova portabilna klasa:
critical_section :: critical_section ()
{
this->init (NULL);
entered=0;
}
critical_section :: ~critical_section ()
{
this->destroy ();
}
int critical_section :: init (void *mutexattr)
{
#ifdef _WIN32
InitializeCriticalSection(&cs);
return 1;
#else
if ( pthread_mutex_init(&cs, (const pthread_mutexattr_t *)mutexattr) == 0)
return 1;
else
return 0;
#endif
}
int critical_section :: destroy ()
{
#ifdef _WIN32
DeleteCriticalSection(&cs);
return 1;
#else
if ( pthread_mutex_destroy(&cs) == 0)
return 1;
else
return 0;
#endif
}
int critical_section :: try_enter ()
{
#ifdef _WIN32
if (TryEnterCriticalSection(&cs)!=0)
{
entered=1;
return 1;
}
else
return 0;
#else
if (pthread_mutex_trylock(&cs) == 0)
{
entered=1;
return 1;
}
else
return 0;
#endif
}
int critical_section :: enter ()
{
#ifdef _WIN32
EnterCriticalSection(&cs);
entered=1;
return 1;
#else
if (pthread_mutex_lock(&cs) == 0)
{
entered=1;
return 1;
}
else
return 0;
#endif
}
int critical_section :: leave ()
{
#ifdef _WIN32
LeaveCriticalSection(&cs);
entered=0;
return 1;
#else
if (pthread_mutex_unlock(&cs) == 0)
{
entered=0;
return 1;
}
else return 0;
#endif
}
|
|
|
|
Poslao: 09 Nov 2005 14:17
|
offline
- Nom
- Građanin
- Pridružio: 17 Nov 2004
- Poruke: 168
- Gde živiš: Shanghai, China
|
MySQL ++
Potrazi, radi bez ikakvih problem (koristio sam i shljaka, jedino morash da kotristish libmysql.dll od verzije instaliranog mysql servisa, i neke komande su 'zastarele' i koriste se neke druge, na pr. ne koristis xxx->connect(..) vec xxx->real_connect(...) i slicno.
Pozdrav
|
|
|
|
Poslao: 09 Nov 2005 15:00
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
on trazi za MSSQL, a ne za MySQL
|
|
|
|
Poslao: 10 Nov 2005 14:30
|
offline
- cuoea
- Novi MyCity građanin
- Pridružio: 12 Apr 2005
- Poruke: 6
|
Hvala na primeru...
Posto sam resio problem koji me je mucio red je i da podelim resenje.
Dakle, problem je bio u pristupu bazi kroz ADO komponente Borland C++ Buildera 5, i sastojao se u tome da koriscenje istih komponenti lepo funkcionise u single-threaded okruzenju.
U mom slucaju, pisao sam servis ciji jedan thread treba da pristupa MSSQL bazi. Iz nekog razloga, koriscenje ovih komponenti besprekorno radi, ali pod uslovom da kreiram jedan objekat u glavnom threadu servisa koji ce konstantno drzati jednu konekciju ka bazi otvorenu. Jedino tada komponente koje dinamicki alociram u thread-u koji zaista treba da pristupa bazi rade kako treba.
Iskreno, nemam predstavu da li je to neki bag u kompajleru/objektima, ili to tako treba da se radi. Jedino korisno sto se tice datih komponenti u Borlandovom help-u potencira da su thread-safe napisane, ali da svi drugi data-aware objekti (koji se mahom koriste u korisnickim aplikacijama) nisu. Ali sve to ne objasnjava ovakvo ponasanje krajnjeg programa...
|
|
|
|