Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2012, 04:12   #31
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Не знаю как в классах, а вообще через GetExitCodeThread.
Только почему "всегда 0". Можно вернуть хоть телефон бабушки.)
у меня есть идея.....
я создам лжесобытие. при помощи SetEvent;
и с ним синхронизирую... должно сработать.
ща быром.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 04:20   #32
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ничем оно тебе не поможет.
EUGY вне форума Ответить с цитированием
Старый 29.12.2012, 04:40   #33
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Ничем оно тебе не поможет.
неее комп зависает.... ща немного подхимичу.
//-----
мне удалось это сделать....
правда второй раз выходит Assert у меня...
WAT_OBJECT_0 что был ранее потом наверное WAT_OBJECT_1
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 29.12.2012 в 05:03.
Perchik71 вне форума Ответить с цитированием
Старый 30.12.2012, 14:35   #34
Shpion007
Пользователь
 
Регистрация: 28.12.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
неее комп зависает.... ща немного подхимичу.
//-----
мне удалось это сделать....
правда второй раз выходит Assert у меня...
WAT_OBJECT_0 что был ранее потом наверное WAT_OBJECT_1
Очень продуктивное у вас обсуждение, спасибо за помощь, так к какому выводу вы пришли? Что посоветуете?
Shpion007 вне форума Ответить с цитированием
Старый 30.12.2012, 17:53   #35
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
Стрелка

Цитата:
Сообщение от Shpion007 Посмотреть сообщение
Очень продуктивное у вас обсуждение, спасибо за помощь, так к какому выводу вы пришли? Что посоветуете?
Для вашей задачи подойдёт TThread или таймер как мы советовали раньше. Заморачиватся вам с апи, полагаю не стоит, но подучить будет продуктивно. Я писал в Delphi да и весь код показывать не намерен.
Но для вас пример с TThread
Код:
class TGraphicsThread: public TThread
{
private:
    <-- Тут ваши переменные
protected:
    // У них всё там __fastcall заморочишься.
    void __fastcall Execute(void);
public:
    void MyResume(void);

    TGraphicsThread(bool Suspended);
    ~TGraphicsThread(void);
};

TGraphicsThread::TGraphicsThread(bool Suspended): TThread(Suspended)
{
    <-- тут инициализируете ваши переменные
}

TGraphicsThread::~TGraphicsThread(void)
{
    <-- тут уничтожаете ваши переменные 
}

// Что бы вас компилятор не мучал своим деприкейтет.
void TGraphicsThread::MyResume(void)
{
  int SuspendCount = ResumeThread(Handle);
  // Чек может быть не доступен в с++, используйте ассерт
  // тут просто проверяется на истенность
  // True - ничего не произодёт
  // False - вызывает ошибку
  CheckThreadError(SuspendCount >= 0);
  if(SuspendCount = 1)
    Suspended = false;
}

void __fastcall TGraphicsThread::Execute(void)
{
  //При помощи конвы рисовать не выйдет.
  //так что юзай апи..
  HDC hDC = GetDC(Form1-Handle);
  // всё вы имеете Device Context теперь работайте с апи.
  //Есть фуны
  //SetPixel
  //TextOut
  //Arc
  //Rectangle
  //BitBlt
  //StreatchBlt
  //LineTo и MoveTo
  //и тд. ваши знания в апи должны быть полноценными.
}
FreeOnTerminate - отвечает за уничтожение потока за вас, после его завершения.
OnTerminate - событие сообщающая что потоку пришёл конец.
в конструкторе Suspended говорит, о том, запускать поток сразу же
или ждать комманды Resume().

Вот вам исчерпывающая информация.
//-----
Так же учтите... поток после выполнения уничтожается...
разумно сделать в Execute бесконечный цикл
и реализовать в нём 3 события обробатывать можно оператором switch
play Stop, Pause. Плай - рисует Стоп выходит из цикла, пауза- прекращает рисовать, но не выходит из цикла
по идеи у Play должно быть два события.. поток создан или нет.
что делать если он создал и что делать если не создан.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 30.12.2012 в 20:26.
Perchik71 вне форума Ответить с цитированием
Старый 03.01.2013, 17:50   #36
Shpion007
Пользователь
 
Регистрация: 28.12.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
Для вашей задачи подойдёт TThread или таймер как мы советовали раньше. Заморачиватся вам с апи, полагаю не стоит, но подучить будет продуктивно. Я писал в Delphi да и весь код показывать не намерен.
Но для вас пример с TThread
Код:
class TGraphicsThread: public TThread
{
private:
    <-- Тут ваши переменные
protected:
    // У них всё там __fastcall заморочишься.
    void __fastcall Execute(void);
public:
    void MyResume(void);

    TGraphicsThread(bool Suspended);
    ~TGraphicsThread(void);
};

TGraphicsThread::TGraphicsThread(bool Suspended): TThread(Suspended)
{
    <-- тут инициализируете ваши переменные
}

TGraphicsThread::~TGraphicsThread(void)
{
    <-- тут уничтожаете ваши переменные 
}

// Что бы вас компилятор не мучал своим деприкейтет.
void TGraphicsThread::MyResume(void)
{
  int SuspendCount = ResumeThread(Handle);
  // Чек может быть не доступен в с++, используйте ассерт
  // тут просто проверяется на истенность
  // True - ничего не произодёт
  // False - вызывает ошибку
  CheckThreadError(SuspendCount >= 0);
  if(SuspendCount = 1)
    Suspended = false;
}

void __fastcall TGraphicsThread::Execute(void)
{
  //При помощи конвы рисовать не выйдет.
  //так что юзай апи..
  HDC hDC = GetDC(Form1-Handle);
  // всё вы имеете Device Context теперь работайте с апи.
  //Есть фуны
  //SetPixel
  //TextOut
  //Arc
  //Rectangle
  //BitBlt
  //StreatchBlt
  //LineTo и MoveTo
  //и тд. ваши знания в апи должны быть полноценными.
}
FreeOnTerminate - отвечает за уничтожение потока за вас, после его завершения.
OnTerminate - событие сообщающая что потоку пришёл конец.
в конструкторе Suspended говорит, о том, запускать поток сразу же
или ждать комманды Resume().

Вот вам исчерпывающая информация.
//-----
Так же учтите... поток после выполнения уничтожается...
разумно сделать в Execute бесконечный цикл
и реализовать в нём 3 события обробатывать можно оператором switch
play Stop, Pause. Плай - рисует Стоп выходит из цикла, пауза- прекращает рисовать, но не выходит из цикла
по идеи у Play должно быть два события.. поток создан или нет.
что делать если он создал и что делать если не создан.
Спасибо большое за помощь, принцип работы, думаю понял, но вот ошибка выходит в этой строке: " ~TGraphicsThread(void);".

[BCC32 Error] Unit1.cpp(19): E2113 Virtual function '~TGraphicsThread::TGraphicsThread( )' conflicts with base class 'TThread'
C++ Embarcadero RAD Studio 2010.
Shpion007 вне форума Ответить с цитированием
Старый 03.01.2013, 19:18   #37
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Shpion007 Посмотреть сообщение
Спасибо большое за помощь, принцип работы, думаю понял, но вот ошибка выходит в этой строке: " ~TGraphicsThread(void);".

[BCC32 Error] Unit1.cpp(19): E2113 Virtual function '~TGraphicsThread::TGraphicsThread( )' conflicts with base class 'TThread'
C++ Embarcadero RAD Studio 2010.
ааа забыл написать конструкторы тоже типа __fastcall укажите должно помочь.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 04.01.2013, 19:52   #38
Shpion007
Пользователь
 
Регистрация: 28.12.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
ааа забыл написать конструкторы тоже типа __fastcall укажите должно помочь.
Спасибо большое!!! Работает! Вот небольшая программа для проверки. Кнопка 1 - старт, кнопка 2 - стоп. Подскажите пожалуйста как стоп реализовать, и изменять цвет пера, вот так провал не получается: "CreatePen(PS_SOLID, 2, RGB(0, 0, 255));".
Цитата:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
class TGraphicsThread: public TThread
{
private:
//<-- Тут ваши переменные
int a;
protected:
// У них всё там __fastcall заморочишься.
void __fastcall Execute(void);
public:
void __fastcall MyResume(void);

__fastcall TGraphicsThread(bool Suspended);
__fastcall ~TGraphicsThread();
};

__fastcall TGraphicsThread::TGraphicsThread(bo ol Suspended): TThread(Suspended)
{
//<-- тут инициализируете ваши переменные
}

__fastcall TGraphicsThread::~TGraphicsThread()
{
//<-- тут уничтожаете ваши переменные

}

// Что бы вас компилятор не мучал своим деприкейтет.
void __fastcall TGraphicsThread::MyResume(void)
{
int SuspendCount;
// Чек может быть не доступен в с++, используйте ассерт
// тут просто проверяется на истенность
// True - ничего не произодёт
// False - вызывает ошибку
//SuspendCount = ResumeThread(Handle);
CheckThreadError(SuspendCount >= 0);
if(SuspendCount = 1) Suspended = false;
}

void __fastcall TGraphicsThread::Execute(void)
{
int i, H;
H = Form1->Height;
//При помощи конвы рисовать не выйдет.
//так что юзай апи..
HDC hDC = GetDC(Form1->Handle);
for (i = 0; i > -1; i++) {
MoveToEx(hDC, i, i, NULL);
LineTo(hDC, i, H/2);
TextOut(hDC, i%500, i%500, "Number of raster fonts: ", 24);
}
// всё вы имеете Device Context теперь работайте с апи.
//Есть фуны
//SetPixel
//TextOut
//Arc
//Rectangle
//BitBlt
//StreatchBlt
//LineTo и MoveTo
//и тд. ваши знания в апи должны быть полноценными.
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TGraphicsThread *MyThread = new TGraphicsThread(true);
MyThread->Suspended = false;
MyThread->FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
Shpion007 вне форума Ответить с цитированием
Старый 04.01.2013, 22:15   #39
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

я же говорил...
как и советовал берс....
делайте цикл в Execute потоке
Код:
while(true) // вечный цикл
{
    if(stop) break; // Пользователю надоело... и он нажал стоп 
    if(start) // тут логическая переменная Пауза и Плей
    {
       //Тут ваш текст
    }
}
дробить нельзя
Код:
SuspendCount = ResumeThread(Handle);
Код:
TGraphicsThread *MyThread = new TGraphicsThread(true);
MyThread->MyResume();
Зачем писать ничего?
я бы написал бы так тогда
Код:
TGraphicsThread *MyThread = new TGraphicsThread(false);
и поток сразу же поедет. впринципе можно и так...
у вас только 3 кнопки.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 04.01.2013 в 22:20.
Perchik71 вне форума Ответить с цитированием
Старый 04.01.2013, 22:41   #40
Shpion007
Пользователь
 
Регистрация: 28.12.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
я же говорил...
как и советовал берс....
делайте цикл в Execute потоке
Код:
while(true) // вечный цикл
{
    if(stop) break; // Пользователю надоело... и он нажал стоп 
    if(start) // тут логическая переменная Пауза и Плей
    {
       //Тут ваш текст
    }
}
дробить нельзя
Код:
SuspendCount = ResumeThread(Handle);
Код:
TGraphicsThread *MyThread = new TGraphicsThread(true);
MyThread->MyResume();
Зачем писать ничего?
я бы написал бы так тогда
Код:
TGraphicsThread *MyThread = new TGraphicsThread(false);
и поток сразу же поедет. впринципе можно и так...
у вас только 3 кнопки.
Всё работает!!! Большое спасибо!!!
Shpion007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04