libmysql.DLL въпрос

6 отговора 838 прегледа
#1

libmysql.DLL въпрос

тази тема я бях пуснал в програмисти, но оттам ме посъветваха да я пусна и тук. значи намерих си workaround на проблема, но ми е интересно да разбера спецификите за конкретния случай.

тъй като там се изписа доста вече, погледнете:
[линк]

проблема с memory leaks се оказа точно в самия libmysql.DLL
тествани са доста такива от 3.23.xx версиите, софтуерът е компилиран и с Borland-ския компилатор и с MicroShit-ското WC (не това не е кенеф, това е syntax error - т.е. Microsoft VC++)

има ли някой тук повече опит и да може да даде feedback и акъл (въпреки, че намерих workaround се заинтригувах да подълбая и изнамеря някакво смислено обяснение на изтичането на памет).

Отговор
в отговор на Ц++ #2

Re: mysql_thread_end() ????

След като клиентската ти част е "многонишкова" викаш ли тази функция преди спирането на всяка една нишка?

Щото ако не го правиш е нормално паметта да не се освобождава читаво.


Вторият въпрос е дали случайно не работиш под Win 98? Там (и само в 98) има едни загуби на памет дето толкова време вече никой не гу обясни смислено.

salle.online.bg/sig
Отговор
в отговор на salle #3

Re: mysql_thread_end() ????

ами не. но мисля че пробвах и с нея (дори май трябваше да се докопам до нея с LoadLibrary и GetWindowProc, че само с include-ването на mysql.h не стана).

но под LINUX също не я ползвам а там софтуерът обработва стотици хиляди пакети на ден и нямам никакво увеличение на използваната памет.

ще пробвам отново. може би нещо не съм видял като хората, че бях много вече изморен от хиляди опити и дебъвания към края когато опитвах какво ли не.

благодаря за помощта

Отговор
в отговор на Ц++ #4

GetProcAddress()

грешка, горе исках да напиша GetProcAddress() не GetWindowProc().

Отговор
в отговор на salle #5

не ще да зареди функцията mysql_thread_end()

HINSTANCE Dll = LoadLibrary("libmysql.dll");
FARPROC my_mysql_thread_end = GetProcAddress(Dll, "mysql_thread_end");

my_mysql_thread_end e NULL :(

Отговор
в отговор на Ц++ #6

Опитай

FARPROC my_mysql_thread_end = GetProcAddress(Dll, "_mysql_thread_end");
Тоест една подчертавка пред името на функцията.

Bеer? Mоre?
Плацебото
Отговор
в отговор на bira_more #7

Re: Опитай

пак същото :(

най-интересното е обаче, че успя да намери функция my_thread_end (не mysql_thread_end). докато ровех из хелпа на MySQL се докопах до нея (но според него беше стара функция).

аз между другото ползвам 3.23.xx версиите (и съм изключително доволен от тях). с няколко версии вече съм пробвал - ефекта е един и същ.

както каза Salle е нещо, свързано с threads. защото във вариант thread-pool и reuse на thread-ове си нямам никакви грижи.

благодаря все пак на всички за помощта и съветите

Отговор