1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 50

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

07.11.2014, 20:54. Показов 3176. Ответов 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru