Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу вывести на экран через форму в потоке 
:(
    Опции темы
BBulat
Дата 16.2.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 5.12.2006

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



создаю поток с помощью createthread, затем в потоке пытаюсь вывести на экран через форму:

Код

//*.h
class TForm1 : public TForm
{
__published:    // IDE-managed Components

        TButton *Button1;
        TLabel *Label1;
}

Код

//*.cpp
DWORD WINAPI start_Client1(LPVOID client_socket)
{
   ...
   TForm1::Label1->Caption="123";//Здесь ошибка: Member TForm1::Label1 cannot be used without an object
   ...
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ...
   CreateThread(NULL,NULL,start_Client1,&client_socket,NULL,&thID);
   ...
}

Внутри функции TForm1::Button1Click Label1->Caption=" нормально работает, а внутри потока требует "объект". О каком объекте идет речь?
Заранее благодарен!
PM MAIL   Вверх
Alca
Дата 16.2.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



а так?
Код

Form1->Label1->Caption="123";    //Form1 - имя твоей формы


Это сообщение отредактировал(а) Alca - 16.2.2009, 15:41


--------------------
PM WWW ICQ Skype Jabber   Вверх
Dem_max
Дата 16.2.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Пользуйся стандартными VCL потоками
File->New->Other->Thread Object
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ThreadOpenKDF.h"
#include "main.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TThreadOpenKDF *ThreadOpenKDF = NULL;
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
   : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::OpenKDFButtonClick(TObject *Sender)
{

    ThreadOpenKDF = new TThreadOpenKDF(false); // Создаем и запускаем поток
}



Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "main.h"
#include "ThreadOpenKDF.h"
#pragma package(smart_init)


//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall ThreatOpenKDF::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

__fastcall TThreadOpenKDF::TThreadOpenKDF(bool CreateSuspended)
   : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TThreadOpenKDF::Execute()
{
   FreeOnTerminate = true;

   Synchronize(UpdateOpenProgress); // обязательно делаем синхронизацию с основным потоком !!!!

}
//---------------------------------------------------------------------------
void __fastcall TThreadOpenKDF::UpdateOpenProgress()
{
      MainForm->StringGrid->RowCount = iDataCount + 1;  //только так можно  обновлять компоненты на форме, иначе получишь Violation error

       MainForm->Label1->Caption="123";
}
//---------------------------------------------------------------------------



Код

//---------------------------------------------------------------------------

#ifndef ThreadOpenKDFH
#define ThreadOpenKDFH
//---------------------------------------------------------------------------
#include <Classes.hpp>

//---------------------------------------------------------------------------
class TThreadOpenKDF : public TThread
{            
private:
protected:
   void __fastcall Execute();
public:
   __fastcall TThreadOpenKDF(bool CreateSuspended);
   void __fastcall UpdateOpenProgress();
};
//---------------------------------------------------------------------------
#endif




--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
SVN74
Дата 16.2.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Из WinApi потоков к форме надежней всего обращаться через SendMessage...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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