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 ;-( ???
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.
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.
Menu... File->New->Other i z zakladki New wybierz Thread Object.
Obejrz sobie co ci sie stworzylo :)
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
W jeżeli miałoby być przez analogię do Delphi to:
Watek = TWatek->Create(false);
Nie mam zainstlownego BCB więc nie mogę powiedzieć.
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 :)
-
Tworze nowy watek z menu, klase nazywam np. TWatek
-
Dodaje w module Uint1.h: #include "Unit2.h"
a w Unit2.h: #include "Unit1.h" -
Deklaruje watek:
TWatek *W; -
W OnCreate formy glownej:
W = new TWatek(True); -
Tworze 2 buttony:
W OnClick wpisuje:
w pierwszym: W->Resume();
w drugim : W->Suspend(); -
Tworze labela
-
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!
dzieki MatroX o to chodziło! [browar]