DAO & MultiThread
9 отговора
1 прегледа
DAO & MultiThread
Някой може ли да каже как се пуска query в отделна нишка?
CDaoQueryDef *pQuery = new CDaoQueryDef(m_pMainDB);
pQuery->Create(NULL, some_sql); <<<< при мен гръми ето тук
ако е извън нишката, работи нормално
?
from MSDN:
DAO: Database Application Design Options
...
DAO itself is not multithreaded, so you can’t use the MFC DAO classes in multiple threads. Confine your DAO code to a single thread of execution.
!
DAO 3.5 can be used in several threads of a multi-tasking application to accomplish many tasks simultaneously. For example, a long running query may be performed by one thread, while the contents of a large recordset may be displayed by another thread.
This is possible because DAO 3.5 is an inproc (DLL-based) server which supports the OLE Apartment-threading Model. The Apartment-threading Model defines one way interface calls are made to an OLE object and how interface pointers are passed between threads.
Абе то, честно казано...
... Аз изходих от едни коментарии в и-нет, където нянкакви спецове, клатеха
пръст по въпроса за DAO & MultiThread. Запитах един мой колега, който знае
много повече по вьпроса. Той пък беше категоричен - "Не, недейте...".
Но като чета резолюцията на МИГ-31 по-горе, започвам да се чудя. Аз поне,
досега не сьм правил такова нещо. Не ми е трябвало. Ще проследя вашите мнения
най-старателно и ще се поразходя на по-горе указания адрес. Благодаря за ви за
коментарите, които прочетох..
Поздрави: Любо.
мда
10x 2 _noname за примера.
По принцип проблема при мен беше следния:
Тъй като използвам DAO 4.0 (по подразбиране MFC работи с 3.51) се налага да направя накои инициализации преди работа с БД:
AFX_MODULE_STATE *pModule = AfxGetModuleState();
if (pModule->m_dwVersion < 0x0601) pModule->m_dwVersion = 0x0601;
След като махнах тези инициализации и се върнах към 3.51 нямах проблеми с dao & mt.
Но кой-знае защо се появи друг странен проблем: гръми m_wndStatusBar.SetPaneText (statusbar на MainFrame)