Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
3-1128259959
alpine
2005-10-02 17:32
2005.11.13
Вопрос по SQL запросу


11-1111250110
rofl
2005-03-19 19:35
2005.11.13
Adding OnClick-Event to PMenu


14-1129577841
Nic
2005-10-17 23:37
2005.11.13
Сдача сессии.


3-1127990038
1g0r
2005-09-29 14:33
2005.11.13
подключение через dbExpress SYS AS SYSDBA


9-1119728488
Ford
2005-06-25 23:41
2005.11.13
Блеск авто