Начал изучать потоки в С++ Билдере 6. Вот по книге в качестве примера с потоками набрал код, но программа не компилится, не знаю что делать.
M dumb | Golovastik, текст сообщений об ошибках прилагай. так же неплохо их самому пытаться прочитать и осмыслить. |
| Код |
//---------------------------------------------------------------------------
#include <vcl.h> #include <windows.h> #include "ThreadFormUnit.h" #pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- TThreadForm *ThreadForm; HANDLE Thread;
DWORD WINAPI ThreadFunc(LPVOID Param) { HANDLE MAinWnd(Param);
RECT R; GetClientRect(MainWnd, &R);
const MaxWidth = R.right - R.left; const MaxHeight = R.bottom - R.top; int X1,Y1,X2,Y2,R1,G1,B1; bool IsEllipse; while(true) { HDC DC = GetDC(MainWnd);
X1 = rand() % MaxWidth; Y1 = rand() % MaxHeight; X2 = rand() % MaxWidth; Y2 = rand() % MaxHeight;
R1 = rand() & 255; G1 = rand() & 255; B1 = rand() & 255; IsEllipce = rand() & 1;
HBRUSH Brush = CreateSolidBrush(RGB(R1,G1,B1)); SelectObject(DC, Brush);
if(IsEllipse) Ellipse(DC,X1,Y1,X2,Y2); else Rectangle(DC,X1,Y1,X2,Y2);
ReleaseDC(MainWnd,DC); DeleteIbject(Brush); } } __fastcall TThreadForm::TThreadForm(TComponent *Owner) : TForm(Owner) { randomize(); DWORD Id; Thread = CreateThread(0,0,ThreadFunc, ThreadForm->Handle, CREATE_SUSPENDED, &Id);
if(!Thread) { ShowMessage("Невозможно создать Thread"); Application->Terminate(); } } } void __fastcall TForm1::Button1Click(TObject *Sender) { ResumeThread(Thread); Button1->Enabled = false; Button1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Suspended->Thread(Thread); Button2->Enabled = false; Button2->Enabled = true; } //---------------------------------------------------------------------------
|
|