|
Тема
|
DAO & MultiThread
|
|
Автор |
МиГ-31 () |
Публикувано | 23.06.00 15:10 |
|
Някой може ли да каже как се пуска query в отделна нишка?
CDaoQueryDef *pQuery = new CDaoQueryDef(m_pMainDB);
pQuery->Create(NULL, some_sql); <<<< при мен гръми ето тук
ако е извън нишката, работи нормално
| |
|
no comment...
| |
|
А защо да не го правя?
| |
|
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.
| |
|
http://codeguru.earthweb.com/mfc_database/dao_multithreading.shtml
| |
|
погледни и в Knowledge base article Q169395 - PRB: Thread Safety for DAO/Jet 3.5
| |
|
... Аз изходих от едни коментарии в и-нет, където нянкакви спецове, клатеха
пръст по въпроса за 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)
| |
|
|
|
|