Heja
Jak to jest z pracą z komponentem TServerSocket w trybie NonBlocking. Z tego co mi się wydaje, że jest to praca asynchroniczna, do której nie są angażowane żadne wątki poboczne.
Jakie są mechanizmy dostarczane z Delphi, aby sobie taką pracę poukładać. Jest sobie powiedzmy jakieś zapytanko do bazy, które ma się wykonać w odpowiedzi na jakiś pakiet przesłany od klienta, i jak zagwarantować, że procedura opakowująca to zapytanie, zostanie wykonana w całości - tzn. nic tego wykonania nie przerwie ? Próbowałem sekcji krytycznych, ale nie działają - wniosek z tego taki, że wszystko leci w wątku głównym, ale efekt jest taki, że jak mam połączenie od dwóch klientów to w jakiś sposób wykonuje się kod od obu klientów jednocześnie - albo inaczej to ujmując podczas gdy się wykonuje kod z tytułu pierwszego połączenia, nagle zaczyna się wykonywać kod z tytułu drugiego połączenia. Próbowałem też użyć semaforów z licznikiem = 1, ale tak samo nie zdały rezultatu co utwierdziło mnie w przekonaniu, że w tym trybie pracy nie biorą udziału inne wątki.
Czyli reasumując, temat w uproszczeniu wygląda tak: jest sobie serversocket (nonblocking) po odebraniu sygnału z pierwszego połączenia wchodzi do procki która pare chiwl mieli cos na bazie danych, i w tym czasie przychodzi sygnał z drugiego połączenia, więc tamto mielenie jest przerywane i na pierwszy plan wchodzi mielenie z tytułu drugiego połączenia.
Faktem jest, że w procedurze "mielącej", gdzieś tam na boku wyświetlam postęp. A co za tym idzie wywołuje ProcessMessages - czy to przez to są takie przerwania (obstawiam, że tak - zaraz sprawdze) ? W każdym razie wywalenie ProcessMessages, owocuje wiadomo czym.
Wiem że jest jeszcze opcja, tworzenia wątku dla każdego przychodzącego połączenia, jednak z pewnych względów z niej zrezygnowałem (większość projektu mam już pokodowanego, trochę goni czas a wcześniej tego nie robiłem itd itp) - dlatego chciałbym to zrobić na NonBlocking.
Jedyne co mi przychodzi do głowy to zrobienie jakiegoś mechanizmu kolejkowania zadań, i wykonywania ich po kolei. Czyli program po odebraniu sygnału od klienta, wrzuca zadanko do kolejki. A potem co jakiś czas, przelatuję kolejeczkę, i robię jedno za drugim.
Z góry dziękuję za sugestie
Pozdrawiam