Параллельное выполнение одного потока
От: Аноним  
Дата: 16.11.07 18:20
Оценка:
Помогите плз, может кто то слышал о такой ситуации:
в MFC-шном приложении, есть обработчик моего собственного сообщения при этом из двух мест программы из разных потоков делается PostMessage(hWnd, MY_MESSAGE,0,0)
самое странное что по логам получается что это функция выполняется парралельно, например:
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
LOGMSG("Enter OnMyMessage", ::GetCurrentThreadId());

...код

LOGMSG("Leave OnMyMessage", ::GetCurrentThreadId());
}

Логи имеет след вид:

Enter OnMyMessage 3340
Enter OnMyMessage 3340
Leave OnMyMessage 3340
Leave OnMyMessage 3340

Может кто то раньше с таким сталкивался.

заранее спасибо
Re: Параллельное выполнение одного потока
От: Alyas США  
Дата: 16.11.07 18:27
Оценка:
А>Enter OnMyMessage 3340
А>Enter OnMyMessage 3340
А>Leave OnMyMessage 3340
А>Leave OnMyMessage 3340

А>Может кто то раньше с таким сталкивался.


А>заранее спасибо


Ну и чего тут не так — если из разных потоков? Нужно "правильное" выполнение — используй CriticalSection
Re: Параллельное выполнение одного потока
От: Melamed Россия  
Дата: 17.11.07 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Логи имеет след вид:


А>Enter OnMyMessage 3340

А>Enter OnMyMessage 3340
А>Leave OnMyMessage 3340
А>Leave OnMyMessage 3340

А>Может кто то раньше с таким сталкивался.


А>заранее спасибо


Я что-то не пойму. Из логов видно, что функция запускается из одного потока а не из разных так как ID потоков одинаковые.
Re: Параллельное выполнение одного потока
От: rus blood Россия  
Дата: 17.11.07 11:32
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

В твоем обработчике сообщения есть прокрутка цикла сообщений.
Или явные циклы, или функции ожидания с прокруткой сообщений, или модальные диалоги (меню).
Имею скафандр — готов путешествовать!
Re[2]: Параллельное выполнение одного потока
От: Carc Россия http://www.amlpages.com/home.php
Дата: 17.11.07 15:21
Оценка:
"Alyas" <51696@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:2732581@news.rsdn.ru...
>А>Enter OnMyMessage 3340
> А>Enter OnMyMessage 3340
> А>Leave OnMyMessage 3340
> А>Leave OnMyMessage 3340
>
> А>Может кто то раньше с таким сталкивался.
>
> А>заранее спасибо
>
> Ну и чего тут не так — если из разных потоков? Нужно "правильное" выполнение — используй CriticalSection
И чего что из разных потоков? Обработчик то сообщения работает в своем потоке!?!
Странно то, что у него до того как обработчик вышел из первого раза, уже вошел во второй раз. Такого быть не должно.
Проверь LOGMSG ? Может быть это она асинхронна )? Или просто где-то случайно 2 раза выводишь лог!?!
Мистика какая-то! Обработчик сообщения должен сначала выйти из первого вызова, и только потом попасть туда второй раз... Не! Сдается мне тут чего-то не так, либо логи тупят либо еще что-то...
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re[2]: Параллельное выполнение одного потока
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 18.11.07 06:51
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>В твоем обработчике сообщения есть прокрутка цикла сообщений.

RB>Или явные циклы, или функции ожидания с прокруткой сообщений, или модальные диалоги (меню).

еще COM вызовы могут иметь такие последствия — тоже где-то неявно крутят цикл выборки сообщений
... << RSDN@Home 1.2.0 alpha rev. 780 Windows 2003 5.2.3790.65536 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.