[C++ Builder] watki

0

Prosze powiedzcie mi jak ma wygladac funkcja ktora ma byc watkiem, ja wiem tylko tyle ze nie zwraca wartosci. No to pisze
void nazwa(void)
__beginthread(nazwa,0,NULL);
i nie działa wyskakuje bład :
Type mismatch in parameter '__start' (wanted 'void (*)(void *)', got 'void')
jak ta funkcja ma wygladac ;-( ???

0

Z mojego doświadczenia z pracy z wątkami (a korzystałem z nich dosyć dużo) wynika, że nie ma prostrzej metody jak wykorzystanie wbudowanej klasy TThread. Można się bawić z pierwotnymi funkcjami WinAPI, ale ten sam efekt uzyskasz stosując TThread, przy naprawdę nie wielkim wzroście rozmiaru pliku, ale za to znacznie wygodniej.

0

ok dzieki, ale mozesz mi jeszcze powiedziec jak to bedzie wygladac w bcb? przeczytałem artykuł o uzyciu tej klasy no ale to jest w dephi.
wzielem file-new threadobject i wygenerował mi funkcje wpisałem sobie tam kod tego watka, tylko mam klopot z jego wywołaniem a pisałem tak: TTest * watek = new TTest(false); i nie działa.

0

Menu... File->New->Other i z zakladki New wybierz Thread Object.
Obejrz sobie co ci sie stworzylo :)

0

Menu... File->New->Other i z zakladki New wybierz Thread Object.
Obejrz sobie co ci sie stworzylo

eh.. no własnie tak robie nie umiem go tylko wywołac

0

W jeżeli miałoby być przez analogię do Delphi to:
Watek = TWatek->Create(false);
Nie mam zainstlownego BCB więc nie mogę powiedzieć.

0

Ja szczerze mowiac tez mialem z tym problemy...
Przydalby sie jakis szerszy artykul na ten temat (oczywiscie w C++).
Napisze jak zrobilem swoj pierwszy watek, ktory wlasnie przed chwila skonczylem bo sam chce sie nauczyc poslugiwac nimi i wlasnie sobie kombinuje :)

  1. Tworze nowy watek z menu, klase nazywam np. TWatek

  2. Dodaje w module Uint1.h: #include "Unit2.h"
    a w Unit2.h: #include "Unit1.h"

  3. Deklaruje watek:
    TWatek *W;

  4. W OnCreate formy glownej:
    W = new TWatek(True);

  5. Tworze 2 buttony:
    W OnClick wpisuje:
    w pierwszym: W->Resume();
    w drugim : W->Suspend();

  6. Tworze labela

  7. W procedurze TWatek::Execute wpisuje:
    {
    FreeOnTerminate = True;

    Form1->Label1->Caption = "";
    while (!Application->Terminated)
    {
    Form1->Labe1->Caption = Form1->Labe1->Caption + "#";
    if (Form1->Label1->Caption.Length() > 50)
    Form1->Label1->Caption = "";
    Sleep(100);
    }
    }

To chyba wszystko. Watek ten nic porzytecznego nie robi, ale widac przynajmniej, ze dziala :)
Mozna na nim poeksperymentowac i czegos sie nauczyc.
Pozdrawiam!

0

dzieki MatroX o to chodziło! [browar]

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