[Delphi] 1 x DLL i wiele oddzielnych obliczeń

0

Witam. Poruszałem już wcześniej podobny problem ale nie uzyskałem satysfakcjonującej odpowiedzi. Może uda się tym razem. Nie do końca wiedziałem jaki nadać tytuł.
Potrzebuje przerobić moduł obliczeniowy dla pojedynczego programu na moduł wielowątkowy. Wielowątkowość polega tutaj na rozróżnieniu od siebie poszczególnych obliczeń dla wątków - kwestia jednocześnie wykonywanego kodu została rozwiązana w inny sposób. Po wielu próbach jedynym działającym rozwiązaniem jakie udało mi się wykombinować było utworzenie dll-ki z tym modułem a następnie tworzenie kopii biblioteki dla każdego wątku. Nic się nie gryzło, wszystko działało szybko i sprawnie. Okazało się jednak że to rozwiązanie raczej nie może zostać dopuszczone.
Wcześniej próbowałem wrzucić cały moduł do jednego obiektu a potem tworzyć kolejne obiekty dla poszczególnych wątków - jak zostało mi to tutaj zaproponowane. Jednak ze względu na złożoność kodu nie byłem w stanie wrzucić wszystkiego do jednego obiektu. Wątki odnosiły się do tych samych zmiennych i kaszana. Teraz dalej się zastanawiam nad takim rozwiązaniem, chociaż chciałbym to zrobić w miarę szybko a to rozwiązaniem (o ile się uda) może mi zająć sporo czasu. Zastanawiałem się nad wykorzystaniem dll-ki. Żeby zrobić jakiś wskaźnik na obszar pamięci do którego będzie ładowana biblioteka (dla każdego wątku taka osobna kopia) ale nie znalazłem procedur które pozwoliłyby odwołać się potem do takiego wskaźnika, albo nie wiem jak to zrobić. Do 'LoadLibrary' potrzebna jest ścieżka do biblioteki a nie wskaźnik na pamięć. Uchwyt do biblioteki odnosi się do konkretnego pliku więc ponowne przypisanie tej samej biblioteki do wątku powoduje nadpisywanie nowych danych i w efekcie błędne wyliczenia.
Czy ktoś ma pomysł jak można rozwiązać ten problem?

0

Kombinujesz coś nie tak. Utwórz klasę po TThread, i w jej metodzie Execute umieść kod obliczeń.
Jeśli już tak robiłeś i „coś nie działa”, pokaż kod, zobaczymy.

0

Kodu nie przekleje bo to kilkanaście tys. linijek... Rozbudowane klasy i obiekty nie zawsze powiązane ze sobą - dlatego nie mam za bardzo jak tego wrzucić do jednej klasy. Wcześniejsze próby kończyły się niepowodzeniem. Są pewne zmienne globalne, które muszą tam zostać. Próbowałem deklaracji jako threadvar ale też nie szło. Jakbym miał przerabiać program żeby przekazywał wartości tych zmiennych np. przez parametr to połowa kodu do przeróbki. A odnośnie tthread to pisałem że nie zależy mi na takiej wielowątkowości, ponieważ tym się zajmuje program nadrzędny który tworzy u siebie wątki i przesyła jedynie zapytania do biblioteki (obecnie). Więc wystarczy zwykły obiekt. Posunięcie z kopiowaniem dll-ki dla poszczególnych wątków wynikało z braku innych pomysłów.

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