Главная страница
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.04 c
14-1130086693
DK2DK2DK2
2005-10-23 20:58
2005.11.13
Автоматизированое составление расписаний


3-1128090576
Int64
2005-09-30 18:29
2005.11.13
Версия ADO в MDAC 2.8


2-1129569313
Bogdan1024
2005-10-17 21:15
2005.11.13
типо createprocess


11-1111460155
stals
2005-03-22 05:55
2005.11.13
Еще один халявный вопрос :)


1-1130226491
Horovodov
2005-10-25 11:48
2005.11.13
Работа с командной строкой