"Żelazna" procedura? (Chodzi o nieprzerywalny kod)

0

Czy jest możliwe, żeby w Delphi napisać procedurę, lub chociaż jej fragment w taki sposób, żeby żadne zdarzenie systemowe lub programowe nie spowodowało jej przerwania? Nie chcę, żeby program wykonywał jakikolwiek inny fragment kodu dopóki nie zakończy wykonywać ten.

0

Może zwiększenie priorytetu aplikacji coś by pomogło (SetThreadPriority)

0

Ale wtedy na inne zdarzenia też może zareagować... Przypuścmy, że mam jakąś procedurę reagującą na przykład na wciśnięcie Enter w Edicie. Chcę, żeby przeszła ona w całości, a nie przerwał jej żaden Timer czy inne takie ;).

Albo zdarzenie OnRead w TClientSocket - niech jego obsługa wykona się w całości zanim zdarzy się cokolwiek innego lub nawet zanim zostanie wywołane kolejne OnRead (tak, samo sobie potrafi przerwać).

Myślę, że jak zwiększę priorytet to zdarzenia pochodzące z tego samego programu, a w szczególności takie samo zdarzenie - pewnie i tak przerwą mi wykonywanie kodu...
Oczywiście to tylko moje przypuszczenia...

0

Moznaby spróbowac wsadzić ją do oddzielnego wątku z priotyretem na max, wtedy już np. OnTimer jej nie powinien przerwać. Jednak nie jestem do końca pewny czy wywołanie jej (procedury) po raz drugi nie przerwie wykonywania tego pierwszego wywołania. Musisz poeksperymentować.

0

Ale wtedy na inne zdarzenia też może zareagować... Przypuścmy, że mam jakąś procedurę reagującą na przykład na wciśnięcie Enter w Edicie. Chcę, żeby przeszła ona w całości, a nie przerwał jej żaden Timer czy inne takie ;).

Albo zdarzenie OnRead w TClientSocket - niech jego obsługa wykona się w całości zanim zdarzy się cokolwiek innego lub nawet zanim zostanie wywołane kolejne OnRead (tak, samo sobie potrafi przerwać).

Myślę, że jak zwiększę priorytet to zdarzenia pochodzące z tego samego programu, a w szczególności takie samo zdarzenie - pewnie i tak przerwą mi wykonywanie kodu...
Oczywiście to tylko moje przypuszczenia...

Możesz z każdym wykonaniem np. procedury OnRead komponentu ClientSocket1 tworzyć nowy wątek, któremu dasz priorytet maksymalny (REAL_TIME_CLASS_PRIORITY).

0

Możesz z każdym wykonaniem np. procedury OnRead komponentu ClientSocket1 tworzyć nowy wątek, któremu dasz priorytet maksymalny (REAL_TIME_CLASS_PRIORITY).

Hm... mam nadzieję, że nie zaczną chodzić dwa jednocześnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0