Wątki MFC

Odpowiedz Nowy wątek
hej
2005-04-17 20:08
hej
1

Witam. Mam sobie metode w klasie i chce zeby ona byla wykonywana w osobnym watku. Co powinienem zrobic, jakich klas uzyc aby to osiagnac? Pisze w C++ / MFC.

Pozostało 580 znaków

2005-04-17 20:45

Rejestracja: 17 lat temu

Ostatnio: 3 lata temu

0

Najlatwiej chyba tak:

.h

static UINT Watek(LPVOID param);

typedef struct THREADSTRUCT
{
    CMojKlasa *_this;
} THREADSTRUCT;

.cpp

void CMojaKlasa::Start()
{
    THREADSTRUCT *param = new THREADSTRUCT;
    param->_this = this;
    /**/ AfxBeginThread(Watek,param);
}

UINT Watek(LPVOID param)
{
    THREADSTRUCT *ts = (THREADSTRUCT)param;
    ts->_this->MojaFunkcjaWOsobnymWatku();

    // AfxEndThread lub
    return 1;
}

Stwórzmy boga na własne podobieństwo
Niech będzie mały i parszywy,
Wtedy wszyscy w niego uwierzą...

Pozostało 580 znaków

hej
2005-04-17 23:25
hej
0

Wielkie dzieki. Swojadroga mogli jakos lepiej oto rozwiazac. W ogole to MFC jakies takie nie bardzo jest.

Pozostało 580 znaków

2005-04-18 09:39

Rejestracja: 17 lat temu

Ostatnio: 3 lata temu

0

Kwestia wprawy. Ja jeszcze nie spotkalem sie z zadnym problemem ze strony mfc, wrecz ta biblioteka swietnie ulatwia pisanie programow.

Ja podalem tylko jeden ze sposobow. Jeszcze istnieje cos takiego jak CWinThread i _beginthread :)


Stwórzmy boga na własne podobieństwo
Niech będzie mały i parszywy,
Wtedy wszyscy w niego uwierzą...

Pozostało 580 znaków

hej
2005-04-18 10:38
hej
0

Mam teraz taki problem - metoda ktora mialem umiescic w watku jest wywolywana rekurencyjnie (przeszukiwanie dyskow) - co mam z tym zrobic? Metoda pobiera jako parametr CString bedacy sciezka.

Pozostało 580 znaków

hej
2005-04-18 15:11
hej
0

Ok poradziwlem sobie z tym, ale mam kolejne pytanie. Jako parametr podajesz wskaznik na obiekt klasy THREADSTRUCT utworzony za pomoca new. Nie widze natomiast zebys go gdziekolwiek niszczyl za pomoca delete. Mozesz napisac gdzie powinno to sie odbywac? Probowalem utworzc strukturke na stosie ale oczywiscie nie dziala to bo po rozpoczeciu watku obiekt jest niszczony i wskaznik na THREADSTRUCT jest nieaktualny. Prosze o pomoc.

Pozostało 580 znaków

2005-04-18 17:09

Rejestracja: 17 lat temu

Ostatnio: 3 lata temu

0

A takie cos mowi dokumentacja:

Terminating a thread prematurely is almost as simple: Call AfxEndThread from within the thread. Pass the desired exit code as the only parameter. This stops execution of the thread, deallocates the thread's stack, detaches all DLLs attached to the thread, and deletes the thread object from memory.

To chyba rozwiazuje czesc problemow.
Wiem, moj kod nie wyglada najladniej, ale chodzilo o najprostsze wykorzystanie watkow.

BTW: Mala poprawke wrzucilem do kodu. Jakis bezsens tam wpisalem przy AfxBeginThread :D


Stwórzmy boga na własne podobieństwo
Niech będzie mały i parszywy,
Wtedy wszyscy w niego uwierzą...

Pozostało 580 znaków

Odpowiedz

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