Kilka tematów o wątkach już było ale nie znalazłem tam odpowiedzi, podobnie w sieci. Mam następujący problem/pytanie.
Jest napisany gotowy program obliczeniowy z silnikiem z formie biblioteki dll. Wszytko działa ok. Silnik jest trochę skomplikowany, pełno klas itd. Teraz ta biblioteka z silnikiem ma zostać wykorzystana przez inny program, a konkretnie ma zostać silnikiem w aplikacji serwerowej. Aplikacja ta ma wysyłać do biblioteki wiele zapytań na raz od różnych użytkowników, pobierać przesyłane od nich dane i wykonywać równocześnie obliczenia dla każdego zapytania. Obecnie ten silnik nie ma żadnych wątków, był pisany dla aplikacji jednostanowiskowej. Teraz trzeba go przerobić na wersję serwerową z wątkami które będą wykonywać obliczenia dla nowych użytkowników. Aplikacja do biblioteki nie jest pisana w delphi i nie zajmuje się nią, odpowiadam jedynie za bibliotekę. (Problem z połączeniem między nową aplikacją [w javie] a biblioteką delphi jest rozwiązany). Moje pytanie/problem brzmi: jak najprościej przerobić taką bibliotekę?
Zastanawiałem się nad stworzeniem jakiejś klasy od TThread z procedurami odpowiedzialnymi za pobieranie danych, wywoływanie obliczeń oraz pobieranie wyników. I w tych procedurach z wątku byłoby odwołanie do właściwych procedur obliczeniowych biblioteki. Procedury z wątku muszą zawierać identyfikatory (numerki dla poszczególnych użytkowników, aby rozróżnić poszczególne dane, obliczenia i wyniki). Czy takie przypisanie procedur i funkcji bez wątkowych do procedur i funkcji wątkowych pozwoli na bezkolizyjna pracę silnika? Chodzi o to że w silniku nie ma wątków i są jakieś zmienne wewnątrz poszczególnych klas. Czy jeśli za pomocą procedury z wątka wywołam procedurę bezwątkową, a następnie kolejny wątek wywoła tą samą procedurę, to czy da się rozróżnić dane w jednym i drugim wątki? przykład
procedure Pobierzdane(1); <- procedura z wątku 1
begin
Wczytajdane;
end;
procedure Pobierzdane(2); <- procedura z wątku 2
begin
Wczytajdane;
end;
(wątki będą tworzone jakoś dynamicznie z tymi numerami, chciałem tylko obrazowo pokazać o co mi chodzi)
i wywołanie potem w programie:
//(wywołanie wątku 1)
Pobierzdane(1);
//(wywołanie wątku 2)
Pobierzdane(2);
Czy w takim przypadku wartości w zmiennych z Wczytajdane dla Pobierzdane(1) oraz Pobierzdane(2) da się jakoś rozróżnić? Czy to będą te same wartości zmiennych? Wydaje mi się że będę miał te same dane ale dopiero zaczynam z wątkami.
Do głowy przychodzi mi także kompletna przebudowa całego silnika i stworzenie obecnych klas z pochodnych TThread ale to by była masakra. Jest tego zdecydowanie za dużo i pewnie coś bym po drodze jeszcze zepsuł. (ps. nie pisałem tej biblioteki z silnikiem, wiem co i jak tam działa ale to nie omja robota). Czy ktoś mógłby jakoś pomóc lub doradzić jak to wykonać?
Będę wdzięczny za każdą pomoc.