Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50

Функция потока

07.11.2014, 20:54. Показов 3011. Ответов 32
Метки нет (Все метки)

Создаю функцию потока.Хочу её прописать в .h файле как метод класса,но не получается..почему?Выдает такую ошибку билдер
Миниатюры
Функция потока  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2014, 20:54
Ответы с готовыми решениями:

Функция потока
Подскажите пожалуйста, как сделать Перевод числа оформить как функцию потока. Ввод числа происходит до запуска потока, а вывод строки – по...

Функция потока в классе
Подскажите, как запихать в класс функцию потока (небольшой пример, если есть)? когда пишу так: class abc{ DWORD WINAPI...

Стартовая функция потока (C++, VisualStudio2008)
Уважаемые программисты! Передо мной стоит следующая задача: написать программу, используя WinAPI, в которой 5 потоков генерируют...

32
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
11.11.2014, 17:52  [ТС]
Спасибо огромное!Все получилось!
0
11.11.2014, 18:03

Не по теме:

UI, понятно, то понятно, но была надежда, что если объявление глобальных переменных в cpp-файле ТС посчитала глупой ошибкой, то эта ошибка будет менее глупой ... Оказалось, что не менее )

0
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
11.11.2014, 19:54  [ТС]
Ну а теперь новая проблема..почему-то поток не хочет работать.Вроде экземпляр создан.Запустила..НО нет никакой реакции

Добавлено через 1 час 3 минуты
Или я не правильно вызываю поток?
C++
1
2
TMyThread *TestThread = new TMyThread(true);
TestThread->Resume();
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
11.11.2014, 20:15
мариямаша, у вас userNumber по-умолчанию равен -1. Цикл в потоке выполняется до тех пор, пока userNumber не равно -1. То есть, не будет выполнено ни одно итерации цикла. Вся "реакция" у вас находится внутри цикла, который не выполняется, поэтому вы реакции и не видите.
0
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
11.11.2014, 20:20  [ТС]
Нет,нет..у меня в первичном потоке пользователь вводит как раз в UserNumber число
C++
1
2
3
4
5
void __fastcall TForm1::ProverkaNumber(TObject *Sender)
{
userNumber=(StrToInt)(sEdit2->Text);
 
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
11.11.2014, 21:45
Прелестно, а где видно, что то, что ввел пользователь и то, что получает поток - это одно и то же число? Где extern-описание этой переменной?
0
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
12.11.2014, 06:14  [ТС]
Вот файл первичного потока.Я просто в первый раз там все скопировала.


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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "sButton"
#pragma link "sEdit"
#pragma link "sMemo"
#pragma resource "*.dfm"
TForm1 *Form1;
int poputka;
int userNumber = -1;
int result;
int const max=100;
int const min=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::RandomClick(TObject *Sender)
{
 if (sEdit1->Text=="7"||sEdit1->Text=="8" ||sEdit1->Text=="9"||sEdit1->Text=="10")
{
poputka= (StrToInt)(sEdit1->Text);
ShowMessage("Вы успешно ввели максимальное количество попыток");
 
      TMyThread *TestThread = new TMyThread(true);
      TestThread->Resume();
 
 
 
 
  sEdit2->Visible=true;
 
  sEdit1->Visible=false;
  sButton1->Visible=false;
  sButton2->Visible=true;
  sEdit2->Clear();
 
 
 
ShowMessage("Поздравляем!Для вас сгенеривано целое число в диапазоне от 0 до 100!А теперь попробуй угадай его!введи значение в поле");
  //Form1->sMemo1->Lines->Add(IntToStr(result));
}
else
{
 
 ShowMessage("Попробуйте ввести корректное число попыток");
 sEdit1->Clear();
 
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ProverkaNumber(TObject *Sender)
{
userNumber=(StrToInt)(sEdit2->Text);
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
sEdit2->Visible=false;
 
  sButton2->Visible=false;
  sEdit1->Clear();
}
//---------------------------------------------------------------------------
А вот файл потока..
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
#include <vcl.h>
#pragma hdrstop
     #include "Unit1.cpp "
#include "Unit2.h"
 
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
 
 
//---------------------------------------------------------------------------
 
__fastcall TMyThread::TMyThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
CreateSuspended =true;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
 
        randomize();
        result=(rand() % max);
          Form1->sMemo1->Lines->Add(IntToStr(result));
        bool flag=true;
 
           while(flag)
           {
           if(userNumber != -1)
           {
                         if (userNumber == result)
                         {
                        ShowMessage("Вы угадали число!!");//Сообщение выдать
                        poputka=-1;
                         flag=false;
                         break;
 
 
                         }
                 if (poputka > 1 )
               {
                   if (userNumber > result)
                     {
 
                    ShowMessage("Вы не угадали число!!Повторите попытку!");
                    ShowMessage("ПОдсказка)))Введенное число больше результата");
                    Synchronize(ClearEdit2);
 
                      }
 
 
                  else
                  {
                   ShowMessage("Вы не угадали число!!Повторите попытку!");
                    ShowMessage("ПОдсказка)))Введенное число меньше результата");
                  Synchronize(ClearEdit2);
                  }
                 }
              poputka--;
                userNumber=-1;
                 ShowMessage("кол-во попыток исчерпано");
                  flag=false;
                         break;
 
            }
 
           }
 
 
 
}
//---------------------------------------------------------------------------
   void __fastcall TMyThread::ClearEdit2()
{
 Form1->sEdit2->Clear();
   ShowMessage("Введите число ещё раз!");
Может я как-то не так создала поток?и Вызвала потом его..Или косяк в функции потока.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
12.11.2014, 06:27
мариямаша, где у вас вызов метода ProverkaNumber? При нажатии на кнопку Random у вас этот метод не вызывается, а значит, если вы не вызываете этот метод каким-нибудь образом до нажатия кнопки Random, то в потоке переменная userNumber равна -1.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
12.11.2014, 11:07
мариямаша, еще раз повторить? Откуда переменная userNumber в доп. потоке известна? Я не вижу нигде ее описания, как внешней, чтобы линкер мог найти ее в другой единице трансляции (т.е., в другом CPP-файле). Наиболее вероятно, что при компиляции файла потока создается своя копия этой переменной (хотя этого я в коде тоже не вижу), которая никакого отношения к той, что объявлена в Unit1.cpp не имеет. Пока не покажешь оба CPP и оба H-файла полностью - гадать бессмыссленно...
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
12.11.2014, 11:24
UI, Она у себя добавила во второй Unit2.cpp такую строку)
C++
1
#include "Unit1.cpp "
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
12.11.2014, 12:27
За это надо бить линейкой по пальцам, отсюда глюки и вылазят...
0
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
12.11.2014, 20:08  [ТС]
А скажите я правильно создаю и вызываю поток?
0
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50
22.11.2014, 12:52  [ТС]
[C++ Fatal Error] Unit2.cpp(3): F1005 Include files nested too deep
Подскажите,выдает такую ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2014, 12:52

Pthread функция потока внутри класса
Нужно чтобы функция pthread_create принимала на входе функцию-член класса, в котором я вызываю pthread_create собственно. Так сделать не...

Функция для записи в буфер из потока
существует в с++ такая функция для загрузки потока данных в строку fgets(buf,10000, f); но недостаток этой функции в том, что при...

Функция потока не видит структуру класса
Здравствуйте! Подскажите, как это исправить: class ClassA { struct st { int a; }; ....... };

Узнать номер потока в котором исполняется функция
Пытаюсь написать многопоточную программу и окончательно запутался... Много блокировок. Все в одном классе. Методы класса выполняются во...

При создание потока не берется функция с параметром
Если написать так ... Thread hh = new Thread(F(3)); // тут ошибка ... public static void F(int i) { ... }


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1) Сложность: Medium Источник: LeetCode 380 Задача Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли. Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack Сложность: Medium Источник: LeetCode 155 Задача: Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1). Методы:
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru