Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отображение статуса 
:(
    Опции темы
_hunter
  Дата 13.4.2004, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



пытаюсь делать так:
Код
//.h
//----------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//----------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>

//----------------------------------------------------------------
class CThread : public TThread
{
private:
       TForm * frmStatus;
       int * currentState;
protected:
       void __fastcall Execute();
       void __fastcall UpdateForm();
public:
       __fastcall CThread(int maxValue, int * Value);
};

//----------------------------------------------------------------
class TForm1 : public TForm
{
__published:
       TButton *Button1;
       void __fastcall Button1Click(TObject *Sender);
public:
       __fastcall TForm1(TComponent* Owner);
};
//----------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//----------------------------------------------------------------
#endif


Код
//.cpp
//----------------------------------------------------------------
#include "Unit1.h"
#pragma hdrstop
//----------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//----------------------------------------------------------------
__fastcall CThread::CThread(int maxValue, int * value)
       : TThread(false)
{
   FreeOnTerminate = true;

   currentState = value;

   frmStatus = new TForm((TComponent *)NULL);
     frmStatus->ClientHeight = 25;
     frmStatus->ClientWidth = Screen->Width / 2;
     frmStatus->Left = 0;
     frmStatus->Top = 0;
     frmStatus->Show();
}
//----------------------------------------------------------------
void __fastcall CThread::UpdateForm()
{
   frmStatus->Caption = IntToStr(*(currentState));
}
//----------------------------------------------------------------

//----------------------------------------------------------------
void __fastcall CThread::Execute()
{
   while( !Terminated )
       Synchronize(UpdateForm);
}
//----------------------------------------------------------------

//----------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}
//----------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int i = 0;
   CThread * thread = new CThread(10, &i);
   for(i = 0; i < 10; i++)
       Sleep(1000);
}
//----------------------------------------------------------------

проблема в том, что поток начинает работать только после завершения цикла sad.gif
как это побороть

можно ли вызывать методы VCL из WinAPI - потоков?
( есть ли там что-то типа Synchronize()? )

Заранее благодарю за ответ.

Это сообщение отредактировал(а) _hunter - 13.4.2004, 22:06


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
<Spawn>
Дата 14.4.2004, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Попробуй после создания потока воткнуть Application->ProcessMessages


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
_hunter
Дата 14.4.2004, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



не помогло sad.gif


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
<Spawn>
Дата 14.4.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Тогда почитай про функцию WaitForInputIdle, хотя уверять не могу(да и нет времени что бы проверить), но вроде она должна ждать окончания инициализации потока.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.