Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

thread [win32]

[es] :: C/C++ programiranje :: thread [win32]

[ Pregleda: 2523 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mikky

Član broj: 18
Poruke: 1563
*.240.EUnet.yu

ICQ: 44582291


+58 Profil

icon thread [win32]24.04.2002. u 23:53 - pre 245 meseci
imam program koji nema prozore
znaci nema registrovanje klasa, CreateWindow i ostalih stvari vezano za to
znaci nemou da primam poruke WM_
imam i dll kojeg ucitava taj program

e sad problem je sledeci
hocu da posaljem iz dll-a poruku u main thread mog programa
znaci poruka se nesalje u wndproc
vec se obradjuje ovako

Code:

MSG msg;

while(1)
{
   GetMessage(&msg,0,0,0)
   if (msg.message == WM_USER+100)
   {
      // DO STUFF 
   }
}


(ovde nije potreban DispatchMessage() jer nemam wndproc proceduru)

a iz dll-a poruku u exe saljem preko PostThreadMessage()
prvi parametar ove fje je thread ID
to treba da bude thread ID od mog WinMain() threada u .exe
to sam uzeo preko GetCurrentThreadId() i poslao dll-u jos u inicijalizaciji kao parametar neke funkcije

da li je u opste moguce slati thread poruke izmedju dll-a i exe-a ??
eh valjda me je neko shvatio sta pokusavam
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: thread [win32]25.04.2002. u 00:07 - pre 245 meseci
Možda glupo pitanje, ali da li ti uopšte startuješ nov thread u tvom dll-u? To što je neka funkcija u dll-u ne znači da će se izvršavati u posebnom thread-u nego main.
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.4.EUnet.yu

ICQ: 44582291


+58 Profil

icon Re: thread [win32]25.04.2002. u 15:39 - pre 245 meseci
ne ne pogresno si razumeo, mozda sam ja malo zakomplikovao celu pricu ali u sustini je prosto

sve sto ja hocu je da iz dll-a posaljem poruku u WinMain() thread u .exe
znaci preko funkcije PostThreadMessage
ali nesto mi neide...da li je to u opste moguce i kako
(threadId WinMain-a sam prosledio dll-u preko neke druge funkcije kao parametar kako bi funkcija PostThreadMessage() ciji je to prvi parametar znala kom threadu da posalje)
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16266
*.verat.net



+7094 Profil

icon Re: thread [win32]25.04.2002. u 16:50 - pre 245 meseci
Nisi bas najjasnije rekao to sto hoces da uradis

Mislim da PostThreadMessage radi uz odredjene uslove - procitaj MSDN dokumentaciju kako da pravilno izvedes tu vrstu komunikacije.


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: thread [win32]25.04.2002. u 17:03 - pre 245 meseci
Citat:
Mikky:
sve sto ja hocu je da iz dll-a posaljem poruku u WinMain() thread u .exe
znaci preko funkcije PostThreadMessage


Ama, ne razumem te ništa. Kada startuješ program, imaš samo jedan thread i taj se startuje upravo od WinMain(). Odatle možeš da startuješ nove thread-ove, čija entry funkcija može (i ne mora) da bude definisana u nekom dll-u. Ako ne startuješ eksplicitno nove thread-ove iz glavnog thread-a, onda imaš single-threaded aplikaciju i PostThreadMessage nema nikakvog smisla. Nedavno sam napisao jedan primer koji koristi PostThreadMessage i ako hoćeš poslaću ti ga (kad ga nađem).

 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16266
*.verat.net



+7094 Profil

icon Re: thread [win32]25.04.2002. u 23:59 - pre 245 meseci
Evo odgovora na sva tvoja pitanja :)

Attachovan uz poruku :)

Hehehe...


Mikky - slucajno sam obrisao tvoju poruku zato sto sam slucajno pritisnuo delete dugme - svejedno, odgovor na tvoj problem je ukljucen u ovu poruku - nadam se da neces zameriti :)

Pitanje je bilo da li neka globalna promenljiva moze biti vidljiva iz DLL fajla - odgovor je - moze, a u primeru imas kako se to radi.

PS.. hm.. kad malo bolje razmislim, evo i ovako - da se vidi:

Dakle, recimo da hocemo da koristimo neki memory array iz DLL-a koristimo u EXE fajlu:

moj_dll.c
Code:

#include <windows.h>

__declspec(dllexport)char tmpArray[256];

__declspec(dllexport)void neka_moja_funkcija_sto_radi_nesto() { /* bla */ }


moj_exe.c
Code:

#include <stdio.h>

__declspec(dllimport)char tmpArray[256];

void main()
{
  sprintf(tmpArray, "Zdravo, svete!\n");
  printf(tmpArray);
}



cl /LD moj_dll.c
cl moj_exe.c -link moj_dll.lib

Eto.. to je najprostije moguce - bices u mogucnosti da koristis array definisan u DLL fajlu iz tvog EXE fajla. Meni ovo lici na najprljaviji nacin programiranja i ako budes radio multithreaded aplikaciju 101% ces zaglaviti sa nekim deadlock problemom, ili thread-unsafeness ponasanjem tvoje aplikacije - ovo izbegavaj maksimalno.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
Prikačeni fajlovi
 
Odgovor na temu

[es] :: C/C++ programiranje :: thread [win32]

[ Pregleda: 2523 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.