Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.09.2010
Сообщений: 3

Как передать функцию в поток

03.10.2010, 11:39. Показов 1837. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется стандартный пример пример создания потока в C++Builder

Unit2:

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit1.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 TMyThread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
 
__fastcall TMyThread::TMyThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
     FreeOnTerminate = true; // îñâîáîäèòü çàíÿòóþ ïîòîêîì ïàìÿòü ïî îêîí÷àíèè åãî ðàáîòû
     for(int i=0; i<10000; i++)
       {
        // -- êàêèå-òî ñëîæíûå âû÷èñëåíèÿ â öèêëå
        // ---
        if(Terminated) break;  // ïðåêðàòèòü èçâíå ïîòîê
        Synchronize(pb);
       }
}
//---------------------------------------------------------------------------
 
void __fastcall TMyThread::pb()
{
       static int n = 0;
 
       n++;
       Form1->Label1->Caption = n;
       Application->ProcessMessages();
}
//-----
Unit1:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TMyThread *Thr = new TMyThread(true);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
.........
.........
//---------------------------------------------------------------------------
При компиляции ошибка

C++
1
2
[C++ Error] Unit2.cpp(58): E2451 Undefined symbol 'pb'
[C++ Error] Unit2.cpp(63): E2316 '_fastcall TMyThread::pb()' is not a member of 'TMyThread'
В чем проблема?
Как сделать так, чтобы _fastcall TMyThread::pb() стал мембером of 'TMyThread'?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2010, 11:39
Ответы с готовыми решениями:

Как в поток передать разные функцию ?
Есть поток и две функции как передать их в метод Execute //unit1.cpp #include &quot;Unit2.h&quot; void m1() { ...

Как передать в поток объект класса
Допустим есть класс: class P { private: string text; public: void Text_create(string new_text); // создаем новую...

Передать картинку в поток
Здравствуйте.. помогите пожалуйста не могу передать картинку в поток. поток я зоздаю через класс thread. мне нужно передать...

2
1 / 1 / 2
Регистрация: 07.11.2009
Сообщений: 4
03.10.2010, 12:15
просто объявите вашу функцию pb в Unit2.h, что бы, например, было вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#pragma package(smart_init)
//---------------------------------------------------------------------------
class TMyThread : public TThread
{
private:
protected:
        void __fastcall Execute();
        void __fastcall pb();
public:
        __fastcall TMyThread(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
после этого ошибки компиляции не будут появляться
0
0 / 0 / 0
Регистрация: 26.09.2010
Сообщений: 3
03.10.2010, 14:27  [ТС]
Спасибо. Работает.
Почему то ошибался думая, что Билдер сам добавляет объявления функций в класс потока.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2010, 14:27
Помогаю со студенческими работами здесь

Как передать в функцию параметр цвета
Помогите пожалуйста перевести начало функции из дельфи на си procedure sector(clr:TColor;angle1,angle2:real;msg:string); Я записываю...

Как передать в функцию двумерный массив ?
Блин заморочился уже.. Надо передать двумерные массивы в функцию, обработать их там и вернуть .. помогите.. float Mnozh (float...

CBuilder 6. Как передать StringGrid->Cells в функцию?
Здравствуйте. Пусть у меня есть какая-то форма и в ней таблица StringGrind1 Мне нужно написать обычную функцию, но в ней...

Потоки (передать в поток вид фигуры)
Необходимо передать в поток вид фигуры (кружочки, квадратики). Я передаю значение g: при g=0 выводятся кружочки, иначе выводятся...

Импорт функции из dll: как корректно передать параметры в функцию?
Есть dll. Там функция, в c++ builder импортирую её: extern &quot;C&quot; __declspec(dllimport) int __stdcall StartSequence(char *lId, int ixId,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru