Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Builder Перемещение прямоугольников нарисованных на канве методом повторного перерисовывания https://www.cyberforum.ru/ cpp-builder/ thread1481743.html
Я хотела сделать перемещение прямоугольников нарисованных на канве методом повторного перерисовывания. Для этого я использовала функцию считывания координат курсора. Поскольку на моей канве фон белый, а прямоугольники желтые с черным ободком, я сделала проверку, считывая цвет пикселя с координатами курсора. Если курсор попал на желтый, нахожу координаты верхнего левого и нижнего правого углов...
C++ Builder Замена стиля
Приветствую, ребята. У меня вопросик :). В RAD XE есть возможность задавать визуальный стиль, ну типа, "шкурок". Вот пытаюсь переназначить одно из свойств компонента, и никак не выходит. Что за свойство отвечает за разрешение переназначить ?
C++ Builder Нарисовать рекурсивный узор с картинки Помогите пожалуйста нарисовать через рекурсию этот узор: Желательно на C++ Builder Очень буду благодарен:) (Кому не трудно :) ) https://www.cyberforum.ru/ cpp-builder/ thread1481690.html C++ Builder Узнать кто вызвал событие TEdit->Change Есть небольшая форма с Editaми. У каждого поля есть событие onChange, которое при вводе юзером сразу записывает данные из полей в базу данных предварительно их обработав. Так же эти поля заполняются данными из базы при выборе объекта в ListBox. Поля заполняю просто присваивая Edit->Text = "данные". И при этом сразу срабатывает событие onChange. Начинается некая обработка и часть данных на форме... https://www.cyberforum.ru/ cpp-builder/ thread1481614.html
Внешний обработчик события C++ Builder
Всем доброго времени суток. есть класс: TPainter::TPainter(TPanel *panelTmp) { this->panel = panelTmp; } class TPainter {
C++ Builder Увеличение или уменьшение шрифта горячими клавишами в самой среде https://www.cyberforum.ru/ cpp-builder/ thread1481511.html
Когда я работаю в builder мне нужно увеличить или уменьшить размер кода как это сделает "горячими клавишаты" то есть аналог "ctrl + колеско вверх" ? в Билдер не работает
C++ Builder Изменение формата даты в StaticText Подскажите, пожалуйста, как в элементе StaticText, который выводит системную дату, можно изменять формат даты. По умолчанию пишет дату цифрами, а мне нужно, например, месяц словом вывести или поменять день и месяц местами, или вывести только две последние цифры года... Каким образом осуществляется преобразование формата даты? #include <vcl.h> #pragma hdrstop #include "Unit1.h"... https://www.cyberforum.ru/ cpp-builder/ thread1481508.html В XE4 ошибки с компиляцией программы сделанной в XE C++ Builder
в XE4 ошибки с компиляцией программы сделанной в XE! нажимаю компилировать и получаю вот такие ошибки. в чем проблема и что нужно дописать или поменять в исходном коде чтобы такого косяка не было? Error: Unresolved external '__tpdsc__ Forms::TForm' referenced from D:\путь к файлу\DEBUG\WIN32\UNIT1.OBJ Error: Unresolved external 'Forms::TForm::' referenced from D:\путь к...
C++ Builder Ошибка List index out of bounds(2) В чем ошибка? void __fastcall TForm2::Button2Click(TObject *Sender) { if (flag) { f=fopen(NameFile.c_str(),"a"); if(Edit1->Text == "" || Edit2->Text == "" || Edit3->Text == "" || Edit4->Text == "" || Edit5->Text == "") MessageBox(0,"Заполните пустые поля!","Ошибка!",MB_OK); else https://www.cyberforum.ru/ cpp-builder/ thread1481340.html C++ Builder Модальное окно В приложении клиент-сервер, при разрыве соединения, вывожу модальное окно "подождите программа сама переконектиться". при это включается таймер с обратным отсчетом,через сколько сделать реконект. таймер работает, а вот из модальности сокет отказываться вообще что то воспринимать. Дисконект void __fastcall TMAIN::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket) { ... https://www.cyberforum.ru/ cpp-builder/ thread1481330.html
Разбить отрезок на 10 частей и указать координаты точек разбиения? C++ Builder
С клавиатуры вводятся в четыре Edit координаты двух точек (x1, y1), (x2, y2), так чтобы |x1 - x2| > 50 и |y1 - y2| > 50. Через две эти точки проводится отрезок. Получившийся отрезок нужно разбить на 10 частей, определить координаты точек разбиения и вывести числа построчно на Memo. Координаты разбиения - целые числа и по Х, и по Y. Если получится дробное число, то его округлить.
C++ Builder Пробросить событие Доброго времени суток. Ни как не могу сообразить как сделать следующие: На форме лежит фрейм (Fr) для него написан обработчик (FrMouseDown). На фрейме лежит Label, допустим в Label сработал обработчик LabelMouseDown. Вопрос, как вызвать обработчик FrMouseDown на форме или другими словами пробросить это событие? Заранее спасибо. https://www.cyberforum.ru/ cpp-builder/ thread1481248.html
Заблокирован
20.06.2015, 02:01  [ТС] 0

Странная работа потока - C++ Builder - Ответ 7784666

20.06.2015, 02:01. Показов 686. Ответов 4
Метки (Все метки)

Ответ

Переписал чутка прогу, теперь при нажатии кнопки создаются 3 потока, один из которых является поставщиком данных для двух других, которые обрабатывают эти данные и результаты заносят в список listData.

Вообщем вот что получилось:
Основной поток:
Кликните здесь для просмотра всего текста
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
//---------------------------------------------------------------------------
#include <list.h>
#include <vcl.h>
#pragma hdrstop
 
#include "Thread.h"
#include "ClassThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CRITICAL_SECTION cs;
TGenThread *MainThread;
TGenThread *GenThread;
TGenThread *GenThread1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        InitializeCriticalSection(&cs);
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateThread() {
        terminate = 0; // сбрасываем флаг завешения работы
        //создаем три потока
        MainThread = new TGenThread(true);
        GenThread = new TGenThread(true);
        GenThread1 = new TGenThread(true);
* * * * //инициализируем их
        MainThread->Priority = tpHigher;
        MainThread->Init(0);
        GenThread->Priority = tpHigher;
        GenThread->Init(1);
        GenThread1->Priority = tpHigher;
        GenThread1->Init(2);
* * * * //запускаем главный поток (поставщик данных для двух других)
        MainThread->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Execute() {
 
        for ( int i = 1 ; i < 5 ; ++i ) {
                        flag = 0; // сброс флага завершенных потоками вычислений
                        it = i; // заносим в глобальную переменную новые данные для обработки
                        GenThread->Resume(); // запускаем поток 1
                        GenThread1->Resume(); // запускаем поток 2
                        MainThread->Suspend(); // останавливаем главный поток
        }
        terminate = 1; // выставляем флаг завершения работы
        GenThread->Resume(); // запускаем выход цикла в поток 1 
        GenThread1->Resume(); // запускаем выход цикла в поток 2  
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Generation() {
                        while (!terminate) { 
                        EnterCriticalSection(&cs);
                                listData.push_back(it+10); // обработка данных
                                flag++; // увеличиваем флаг отработанных потоков
                        LeaveCriticalSection(&cs);
                        if ( flag == 2 ) MainThread->Resume(); // проверяем флаг, если этот поток завершил вычисления последним, то запускаем главный поток
                        GenThread->Suspend(); // останавливаем поток 1
                        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Generation1() {
                        while (!terminate) {
                        EnterCriticalSection(&cs);
                                listData.push_back(it+100); // обработка данных
                                flag++;  // увеличиваем флаг отработанных потоков
                        LeaveCriticalSection(&cs);
                        if ( flag == 2 ) MainThread->Resume();  // проверяем флаг, если этот поток завершил вычисления последним, то запускаем главный поток
                        GenThread1->Suspend(); // останавливаем поток 1
                        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        CreateThread(); // создание потоков по нажатию на кнопке
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Memo1->Lines->Add("-----");
        for ( list<int>::iterator it = listData.begin() ; it != listData.end() ; ++it ) {
                Memo1->Lines->Add(*it);
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        DeleteCriticalSection(&cs);
}
//---------------------------------------------------------------------------

Потоки обработки:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
void __fastcall TGenThread::Execute()
{
        FreeOnTerminate = true; //флаг освобождения памяти при завершении потока
        // запуск функции в потоке в зависимости от ключа инициализации
        if (NumF == 0) {
                Form1->Execute(); //
        } else if (NumF == 1) {
                Form1->Generation();
        } else if (NumF == 2) {
                Form1->Generation1();
        } else {};
}
 
//---------------------------------------------------------------------------
void  __fastcall TGenThread::Init( int NumF_)
{
        NumF = NumF_; // Создаем ключ для запуска
}


Добавлено через 16 минут
Цитата Сообщение от _Dimon_ Посмотреть сообщение
интересный способ запуска потока
и Sleep(400) работает не в потоке
слип нужен был для торможения основного потока, чтобы поток который я создал сработал раньше чем основной, но это не помогло.
Про Ваши комментарии в коде:
Цитата Сообщение от _Dimon_ Посмотреть сообщение
GenThread->Resume(); *// ???? у *тебя и так TGenThread(true), то есть создавай TGenThread(false);
TGenThread(true) - создает поток в приоставновленом состоянии, а не наоборот
Цитата Сообщение от _Dimon_ Посмотреть сообщение
Form1->Memo1->Lines->Add(IntToStr(i)); // это нужно делать через Synchronize
Это строка находится в TForm1::Execute() тоесть выполняется в основном потоке программы, никаких синхронизаций там нет.
Цитата Сообщение от _Dimon_ Посмотреть сообщение
GenThread->Terminate();
* * * * GenThread->Resume(); // это что? после убийства потока нет смысла его дергать
GenThread->Terminate() не останавливает поток, а выставляет флаг, что поток можно завершить, учитывая что в этот момент поток находится на паузе, его нужно возобновить чтоб эта строка отработала.

Вернуться к обсуждению:
Странная работа потока C++ Builder
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2015, 02:01
Готовые ответы и решения:

Странная работа TTimer
Здраствуйте) Есть два таймера: у первого интервал 1 (т.е. 1/1000) секунды, у второго интервал...

Странная работа QNetworkProxy
Нашел странное поведение компоненты QNetworkProxy. В одной и той же организации, в одной и той же...

Странная работа QMediaPlayer
Здравствуйте! Я сейчас пишу простенький плеер: window.h #ifndef WINDOW_H #define...

Странная работа getch
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int m;...

4
20.06.2015, 02:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2015, 02:01
Помогаю со студенческими работами здесь

Странная работа FindFirstFile
Здравствуйте! Вывожу функциями FindFirstFile и FindNextFile и получаю имена &quot;.&quot; и &quot;..&quot; далее идут...

Странная работа Wi-Fi
Вчера начал пропадать интернет т.е. есть, рраз на пол минуты - минуту отключается и снова есть,...

Странная работа ПК
Всем привет. Вчера все было нормально, сегодня начал заходить в игру - начал замечать что при...

Странная работа БД
Спасибо всем тем, кто решил откликнуться. Сначала лирика: Имеется проект &quot;Калькулятор&quot;, созданы...

Странная работа vk.com
Недавно я проапгрейдил комп, поставил новую мать, ссд и проц, и сверху на ссдшник накатил новую...

Странная работа браузеров
Добрый день, ребят! Возникла такая проблемка: буквально позавчера обратил внимание на странное...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru