Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

dział ogólny

Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » wtorek, 29 września 2009, 02:26

Odwołując się do http://www.cyfbar.republika.pl/api2.html#api14 mam pytanie czy istnieje możliwość tworzenia wątków nie poprzez tworzenie funkcji w pliku wykonywalnym a np.: poprzez funkcje w bibliotece dll oraz przekazanie jakiś argumentów do ów funkcji?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Cyfrowy Baron » wtorek, 29 września 2009, 09:53

Jest to możliwe.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » wtorek, 29 września 2009, 11:00

A mógł bym dostać jakieś podpowiedzi bo niestyty google (może nie prawidłowo szukałem) ani Borland c++ developers guide nic nie pomogło.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez banita » wtorek, 29 września 2009, 12:10

tworzac dll zanzacz opcje multi threaded. stworz sobie klase watku w dll. udostepnij jakas funkcje ktora ten watek wystartuje, zatrzyma, wylaczy ... robisz dokladnie tak jakby to nie byl zaden dll tylko twoja aplikacja
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Cyfrowy Baron » wtorek, 29 września 2009, 12:29

Tak jak pisze banita, ja tylko sprecyzuję ten fragment jego wypowiedzi:

udostępnij jakąś funkcje która ten watek wystartuje, zatrzyma, wylączy


Chodzi o to, że nie możesz odpalić wątku niejako bezpośrednio z DLL, czyli poprzez wywołanie samego wątku. Jak pisze banita wątek tworzysz dokładnie tak jakbyś to robił w zwykłym programie, ale musisz stworzyć w DLL funkcję (lub kilka funkcji), które będą odpalać wątek, wstrzymywać go i wyłączać. Taką funkcję eksportujesz by program miał do niej dostęp. Potem program wywołuje tą funkcję, a funkcja odpala wątek.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Koziol
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez banita » wtorek, 29 września 2009, 12:52

to ja dodam jeszcze ze taka funkcja ktora startuje watek moze do niego przekazac jakies parametry np:

twoj watek ma konstruktor:

__fastcall TTestThread::TTestThread(bool CreateSuspended, TLabel* lbl);

watek startujesz funkcja 'foo' ktora moze wygaldac np tak:

void __stdcall foo(TLabel* lbl)
{
TTestThread* temp = new TTestThread(false,lbl);
}

w swoim programie wywolujesz:

foo(label);

i watek z dll startuje.

Za ten post autor banita otrzymał podziękowanie od:
Koziol
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » wtorek, 29 września 2009, 20:47

Dziękuje za pomoc wszystko się udało aczkolwiek pisząc dalej napotkałem na problem. A mianowicie jeżeli ów wątek (w pliku dll) utworzy Formularz z przyciskiem w jaki sposób odnotować w programie "macierzystym" że ów przycisk został naciśnięty?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez banita » wtorek, 29 września 2009, 22:37

co rozumiesz przez "odnotowac ze zostal nacisniety"? obsluge zdarenia on_click masz w dll-u. mozesz je rowniez podpiac we wlasnej aplikacji z tym ze calosc musi wspolgrac i ten dll bedzie tylko i wylaczne dla tej twojej konkretnej aplikacji. button moze rozniez zmieniac stan jakiejs zmiennej nalezacej do aplikacji ktorej adres przekazesz do dll-a
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » środa, 30 września 2009, 10:44

OK udało mi się ten problem ominąć.

A takie pytanie o prawidłowość kodowania. Czy w dll można ładować kolejny plik dll czy nie powinno się tego robić chodzi mi mianowicie o:

1. Tworze biblioteke DLL z wątkiem do obsługi bazy MySQL.
2. Do obsługi ów Bazy jest potrzebna kolejna biblioteka zawierająca funkcje MySQL'a.


EDIT Wyczytałem w internecie że można skorzystać z komponentu dbExpress. Ale pytanie dalej częściowo aktualne czy plik dll może ładować kolejny plik dll czy to nieprawidłowe rozwiązanie i wtedy jak najlepiej je ominąć.
Ostatnio edytowano środa, 30 września 2009, 11:19 przez Koziol, łącznie edytowano 1 raz
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez polymorphism » środa, 30 września 2009, 10:48

Nic nie stoi na przeszkodzie...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Cyfrowy Baron » środa, 30 września 2009, 11:09

Zastanawia mnie sens zadawania pytań w stylu: czy można coś takiego zrobić?
Gdy zadajesz sobie pytanie czy można coś zrobić, zamiast zadawać to pytanie na forum, spróbuj to zrobić, a potem jak coś nie wyjdzie zadaj pytanie jak to zrobić. Jak zamiast czy jest bardziej konstruktywne, gdyż na pytanie czy zawsze otrzymasz odpowiedź w stylu tak lub nie, a to w żaden sposób nie rozwiąże Twojego problemu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » środa, 30 września 2009, 11:21

Poprawiłem nieco pytanie ale nie zauważylem oudzielonych odpowiedzi.
Czy jest to prawidłowe rozwiązanie (ładowanie dll w dll)?

A pytanie "czy" jest tu konstruktywne - chodzi mi o prawidłowe pisanie programu. Napisać można wszystko w jednym pliku a potem się okaże, że plik *.exe zajmuje 100MB albo więcej.


EDIT: Jak można udostępnić całą klase z biblioteki dll?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Cyfrowy Baron » środa, 30 września 2009, 12:09

Programując bibliotekę DLL robisz to tak samo jak zwykłą aplikację. Czyli eksport i import funkcji biblioteki do biblioteki wygląda tak samo jak w przypadku biblioteki do aplikacji.

Problem udostępniania klas był niedawno poruszany na tym forum w temacie: viewtopic.php?f=2&t=632

Trzeba jednak sprecyzować pytanie, czy chcesz udostępnić klasę czy obiekt klasy, bo między klasą a obiektem klasy jest taka różnica jak między projektem budynku a gotowym (wybudowanym) budynkiem?!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez Koziol » środa, 30 września 2009, 12:38

Koziol napisał(a):EDIT: Jak można udostępnić całą klase z biblioteki dll?

Cyfrowy Baron napisał(a):Trzeba jednak sprecyzować pytanie, czy chcesz udostępnić klasę czy obiekt klasy, bo między klasą a obiektem klasy jest taka różnica jak między projektem budynku a gotowym (wybudowanym) budynkiem?!


Może na przykładzie będzie łatwiej. Mam sobie klasę w pliku dll (całości kodu nie podałem za dużo by było)
► 


i chciał bym mieć dostęp do wszystkich metod bez konieczności wywoływania dla każdej funkcji czy funkcji pośredniczącej.
Kod: Zaznacz cały
extern  "C"  __declspec(dllexport) void  xxx(xxx xxx);

i
Kod: Zaznacz cały
extern  "C"  __declspec(dllimport) void  xxx(xxx xxx);


o ile tak się da.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Aplikacje wielowątkowe - funkcje poza plikiem wykonywalnym

Nowy postprzez polymorphism » środa, 30 września 2009, 12:57

Cyfrowy Baron napisał(a):Problem udostępniania klas był niedawno poruszany na tym forum w temacie: viewtopic.php?f=2&t=632
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość