OK, sytuacja wygląda tak. Dla ułatwienia powiedzmy, że mam 2 wątki.
Wątek główny, który zajmuje się komunikacją z klientami i wątek, w których zachodzą czasotrwałe operacje.
Scenariusz wygląda tak:
Wątek główny
- Klient łączy się.
- Klient wysyła prośbę o wykonanie jakiejś operacji.
- Serwer sprawdza, czy jakaś operacja nie jest już wykonywana. Jeśli jest, dodaje prośbę z punktu 2 do listy, jeśli nic nie jest wykonywane, wykonuje ją.
Wątek operacyjny:
- Otrzymuje zadanie, że ma wykonać jakąś operację.
- Ustawia flagę informującą, że trwa operacja(za pomocą Synchronize)
- WYkonuje operacje
- Ustawia flagę, że nie trwa żadna operacja(Synchronize)
- Czeka sekundę
- Sprawdza, czy ma jakieś zadania w kolejce(lista z punktu 3 scenariusza wątku głównego). Jeśli jakaś operacja jest, wykonuje ją, czyli wykonuje wszystko od punktu 1.
Teoretycznie powinno być tak, że gdy wątek operacyjny wykonuje jakąś operację, klient może się podłączyć do serwera. Tymczasem okazuje się, że nie ma tutaj równoległości.
Gdy podczas wykonywania zadania wysyłam żądanie wykonania nowego, serwer i tak najpierw czeka, aż zakończy się aktualne(nawet nie sprawdza, czy jest jakieś zadanie wykonywane).
No i jak się próbuję połączyć, gdy wykonywana jest jakaś operacja, też nie mogę.
Co to może się dziać?
Klasa wątku operacyjny jest tworzona normalnie na TThread.
Nawet nie wiem za bardzo jaki kod mam pokazać, bo wszystko wydaje się być w porządku.