Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 26.08.2010
Сообщений: 54

Как из потока обратиться к GUI?

22.08.2013, 10:19. Показов 1249. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// файл server.h
class CServer
{ 
 
  HANDLE hThread;
  DWORD  dwThreadId;
 
  unsigned short Index;
 
  TPanel       **Platform;                    
 
 
   public:
       CServer()
       {
 
            Platform    = new TPanel*[SERVER_CONNECT];
 
 
            Index = 0;
       }
 
      ~CServer(void)
       {
            delete[] Platform;
       }
 
      void ServerStart();                    
      void ServerStop();                        
      void CreatePanelProcessTest();
};
 
extern CServer _Server;
 
 
// файл server.cpp
 
DWORD  dwThreadIdClient;
HANDLE  hThread;
 
void CServer::CreatePanelProcessTest()
{
  Platform[Index]       = new TPanel(Main);
 
 
  Platform[Index]->Parent      = Main->ScrollBox2;
  Platform[Index]->Top         = 20 + Index*80;
  Platform[Index]->Left        = 76;
  Platform[Index]->Height      = 64;
  Platform[Index]->Width       = 873;
  Platform[Index]->Ctl3D       = false;
  Platform[Index]->Color       = clWhite;
  Platform[Index]->BorderStyle = bsSingle;
  Platform[Index]->BevelOuter  = bvNone;
  Platform[Index]->ParentFont  = true;
  Platform[Index]->Font->Name  = "Segoe UI";
  Platform[Index]->Font->Size  = 9;
  
  Index++;
}
 
DWORD WINAPI OnConnectClient(LPVOID lpClient)
{
 
  _Server.CreatePanelProcessTest();
 
   return 0;
}
 
DWORD WINAPI ServerStartThread()
{
  for(int block = 0; block < SERVER_CONNECT; block++)
  {
      int nAddrSize = sizeof(Client);
 
         sClient = accept(sListen, reinterpret_cast<sockaddr*>(&Client), &nAddrSize);
 
           if(sClient == INVALID_SOCKET)
           {
               break;
           }
 
          hThread = CreateThread(NULL,0,OnConnectClient,(LPVOID)sClient,0,&dwThreadIdClient);
 
  }
 
   return 0;
}
 
/*
  Когда подключается клиент для него создается отдельный поток OnConnectClient(LPVOID lpClient)
  этот поток должен создать панель( на панели будет выводиться информация о нем. но это потом ) это делает      _Server.CreatePanelProcessTest();. 
 Панель создается и тут же исчезает и появляется ошибка - Дескриптор окна не найден.
 
 Как устранить эту ошибку ?
 
*/
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.08.2013, 10:19
Ответы с готовыми решениями:

Как запустить qt gui программу, как демон, без gui, скрыв gui?
Как запустить qt gui программу, как демон, без gui, скрыв gui? В gui браузер выполняет...

Как запустить GUI приложение (например, notepad.exe) без отображения GUI?
Добрый день. Интересует есть ли такая возможность, как запустить GUI приложение (например,...

Как лучше и быстрее из SQL в QVector и в GUI или сразу из SQL в GUI
Доброе время суток! Ну собственно вопрос в теме, как лучше сделать. Сначала прочитать SQLite в...

5
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.08.2013, 13:38
Используй TThread метод Syncronize() либо организуй взаимодействие с GUI через оконные сообщения Windows
1
2 / 2 / 1
Регистрация: 26.08.2010
Сообщений: 54
22.08.2013, 17:43  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Используй TThread метод Syncronize() либо организуй взаимодействие с GUI через оконные сообщения Windows
а как организовать взаимодействие с GUI через оконные сообщения Windows ?
я знаю что через SendMessage() а какие именно сообщения посылать ?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.08.2013, 17:49
Поищите в WinApi -разделе решения.
Лично я не использую WinApi, а использую TThread и Indy-компоненты, так что сходу не подскажу.
1
2 / 2 / 1
Регистрация: 26.08.2010
Сообщений: 54
22.08.2013, 18:54  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Поищите в WinApi -разделе решения.
Лично я не использую WinApi, а использую TThread и Indy-компоненты, так что сходу не подскажу.
спасибо
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.08.2013, 11:09
Цитата Сообщение от gera3323 Посмотреть сообщение
Когда подключается клиент для него создается отдельный поток OnConnectClient(LPVOID lpClient)
* этот поток должен создать панель( на панели будет выводиться информация о нем. но это потом ) это делает * * *_Server.CreatePanelProcessTest();.
*Панель создается и тут же исчезает и появляется ошибка - Дескриптор окна не найден.
Как устранить эту ошибку ?
Ошибка в самом подходе к решению. Компоненты VCL создавать в потоке не положено и ничего тут не поделаешь. Поэтому придется слать сообщения главному потоку, чтобы уже в нем создавалось и оформлялось все, что нужно.

Но проще, конечно же, использовать TThread.

Справка по SendMessage().
Похожие темы:
Многопоточность. Создать визуальный объект по завершению потока
Создание потоков для работы со строками
Ошибка в потоке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2013, 11:09
Помогаю со студенческими работами здесь

Внутри потока обратиться к variable Листбокса
Знающие, подскажите. Сделал add variable на ListBox, назвал ListBoxVar category-control. Как из...

Получение потоком GUI данных из другого потока
Здравствуйте. Возникла проблема такого рода: Есть главный поток GUI, в нем при нажатии кнопки...

Работа с gui из потока
Можно ли работать с gui приложения непосредственно из потока(многопоточность)? Если нет, то есть ли...

Взаимодействие с GUI из другого потока
Итак, сабж. Есть несколько потоков. В каждом потоке имеются объекты, посылающие сигналы для GUI....

VC++6.0, как из порожденного потока прочитать переменную главного потока?
Visual C++ 6.0 SP5 Простое диалоговое окно, (MFC) созданное мастером среды VC По нажатию на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru