|
|
|
Потоковая модель СОМ
|
|||
|---|---|---|---|
|
#18+
Привет) Помогите разобраться с такой проблеммой: В основном потоке создаю внутрипроцессный сом-сервер, и запускаю ещё два потока, в которые передаю этот интерфейс. Причём в последних двух потоках я не вызываю CoInitializeEx ... int main() { ... CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); __try{ IInterface *obj = NULL; CreateInstance(...); StartThread(..., ThreadProc1, ...); StartThread(..., ThreadProc2, ...); WaitForMultipleObjects(...); } __finally{ CoUninitialize(); } } DWORD WINAPI ThreadProc1(LPVOID lpPar) { SParam *par = (SParam*)lpPar; IInterface *obj1 = par->obj; // здесь передаю интерфейс // созданный в главном потоке for(int i = 0; i < par->cnt; i++){ obj1->Method1(par->id, &ret); ... анализирую код ошибки, и переменную ret } } return 0; } DWORD WINAPI ThreadProc2(LPVOID lpPar) { ... такое же содержание как и у ThreadProc1 } Я не могу понять почему эти два потока спокойно выполняются, т.е. почему СОМ позволяет потокам не вошедшим ни в какой апартамент вызывать методы сом-класса, созданного в другом потоке(да ещё в апартаменте STA)??? Если засечь время начала и окончания выполнения метода IInterface->Method1(...), то видно что они выполняются ОДНОВРЕМЕННО. Как это понимать??? Проект прилагается в zip-е ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2004, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2034164]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 308ms |

| 0 / 0 |
