Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

Разгородить парралельное исполненийе   Найти похожие ветки 

 
Still Swamp   (2005-09-11 22:37) [0]

У меня классический случай.

Работает приложение. По таймеру TimeSetEvent запускается моя процедура. В нутри нее общитывается некий массив что занимает некоторое время. В этот момент основная программа или того хуже пользователь добавляет элемент в этот массив. Ну естно последствия могет быть весьма печальными.

Как выкрутиться из этой ситуации?

Я поставил флаг на исполнение таймерной процедуры те в любой момент я знаю исполняется ли она или нет.

Далее... по идее мне надо дожидаться везде ее завершения отказывать - это не везде нереально.

Как быть?


 
Fay ©   (2005-09-11 23:06) [1]

2 Still Swamp   (11.09.05 22:37)
1) IMHO, стоит задуматься о применении критических секций.
2) Выкладывай код.


 
Still Swamp   (2005-09-11 23:16) [2]

Код???

С него толку не будет да и объемен он.

Это процедура таймера.

procedure Tm(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
var
MeshRootObject:TMeshRootObject;
iMesh:TMesh;
begin
MeshRootObject:=Ptr(dwUser);
if not MeshRootObject.MeshList.Drawing then MeshRootObject.MeshList.Execute;
end;

Это создание таймера...

AddrMesh:=@MeshRootObject;
IDDrawTimer:=TimeSetEvent(1, 0, @Tm, AddrMesh^, TIME_PERIODIC);

остальное обычные циклы... клики


 
Fay ©   (2005-09-11 23:50) [3]

2 Still Swamp   (11.09.05 23:16) [2]
Из кода не следует, что потоков несколько.
А их несколько? Если нет, то вопрос закрыт.


 
Still Swamp   (2005-09-11 23:58) [4]

я проверил...
я повесил внутри своего приложения пустой цикл.  в таймерной процедуре поставил BEEP. Запустил таймер. Потом цикл... Машиная стоит и бипает при рабочем цикле. Это конечно не означает что запустился второй процесс, однако это означает что в любой обработке внутри которой я расчитываю что ничего не изменится, вторгается работа таймерной процедуры. Мягко говоря, я не могу при каждом опасном действии симафорить этой таймерной функции чтоб не запускалась.


 
Still Swamp   (2005-09-12 00:27) [5]

И еще я проверил... во время исполнения таймерной процедуры продолжается работа приложения.... значит - много поточность.


 
Fay ©   (2005-09-12 04:18) [6]

2 Still Swamp   (11.09.05 23:58) [4]
Прошу прощения, ошибочка вышла 8(

The timeSetEvent function starts a specified timer event. The multimedia timer runs in its own thread. After the event is activated, it calls the specified callback function or sets or pulses the specified event object.

Если код не очень секретный и не шибко большой, то привели его в количестве достаточном, чтобы
1) его не писать самим
2) понять, что исправить


 
Fay ©   (2005-09-12 04:19) [7]

А можешь и не приводить код, а просто налечь на крит. секции. 8)


 
Still Swamp   (2005-09-12 13:40) [8]

ЧТо такое критсекции...
В крадце - если можно.


 
ShiFT   (2005-09-12 14:57) [9]

тут почитай.
http://delphimaster.net/view/1-1124785381/


 
Digitman ©   (2005-09-12 15:19) [10]


> проверил... во время исполнения таймерной процедуры продолжается
> работа приложения.... значит - много поточность


Гениальное умозаключение.

Мол, я не создавал (ни явно ни неявно) никаких дополнительных потоков, но процесс моего приложения тем не менее вдруг с какого-то перепугу оказался многопоточным, сам по себе причем.

Чудеса да и только !)


 
Fay ©   (2005-09-12 15:58) [11]

2 Digitman ©   (12.09.05 15:19) [10]
Да не, не врёт уважаемый Still Swamp.
Эта хрень, которая TimeSetEvent создаёт поток.


 
Digitman ©   (2005-09-12 16:05) [12]


> Fay ©   (12.09.05 15:58) [11]



> не врёт уважаемый Still Swamp


ну а раз не врет, то вчитавшись в справку к ф-ции TimeSetEvent() он должен понимать, что ф-ция Tm() неспроста вызывается в доп.потоке .. там ведь, в справке, черным по белому написано :

The multimedia timer runs in its own thread

значит, не с луны этот поток свалился ...


 
Fay ©   (2005-09-12 16:12) [13]

2 Digitman ©   (12.09.05 16:05) [12]
Это были вариации на тему [6]?
8)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.035 c
3-1128230792
YurikGL
2005-10-02 09:26
2005.11.13
Динамическое формирование текста Exception в ХП


5-1108881919
Salikcool
2005-02-20 09:45
2005.11.13
Скрыть свойство


2-1130349637
XeON
2005-10-26 22:00
2005.11.13
Как скрыть главную форму?


4-1126628734
begin...end
2005-09-13 20:25
2005.11.13
Значения описателей объектов ядра


14-1129712837
Andy BitOff
2005-10-19 13:07
2005.11.13
Для уставших от программирования =)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский