Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637

Как перенести функции из формы в поток

27.02.2015, 13:11. Показов 1137. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день.

Ребята помогите перенести функции из формы в поток.

Вот я пробую.
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//---------------------------------------------------------------------------
 
#include <System.hpp>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit1.h"
#include <string>
#include "curl/curl.h"
 
#pragma comment(lib,"Mylib/My_curl.lib")
#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 virtotal::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
int procent=0;
 
 
__fastcall virtotal::virtotal(bool CreateSuspended)
    : TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
 
struct myprogress {
  double lastruntime;
  CURL *curl;
};
 
/* this is how the CURLOPT_XFERINFOFUNCTION callback works */
static int xferinfo(void *p,
                    curl_off_t dltotal, curl_off_t dlnow,
                    curl_off_t ultotal, curl_off_t ulnow)
{
  struct myprogress *myp = (struct myprogress *)p;
  CURL *curl = myp->curl;
  double curtime = 0;
 
  curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &curtime);
 
   if((dlnow !=0) && (dltotal !=0))
      procent = (dlnow*100)/dltotal;
   
   //вот здесь и выдает ошибку , 
   // E2268 Call to undefined function 'Synchronize'
   Synchronize(&process);
 
  return 0;
}
 
/* for libcurl older than 7.32.0 (CURLOPT_PROGRESSFUNCTION) */
static int older_progress(void *p,
                          double dltotal, double dlnow,
                          double ultotal, double ulnow)
{
  return xferinfo(p,
                  (curl_off_t)dltotal,
                  (curl_off_t)dlnow,
                  (curl_off_t)ultotal,
                  (curl_off_t)ulnow);
}
 
void virtotal::process()
{
   Form1->Label1->Caption = procent;
}
 
 
static size_t write(char *ptr, size_t size, size_t nmemb, std::string* data)
{
  if (data)
   {
     data->append(ptr, size*nmemb);
     return size*nmemb;
   }
  else return 0;  // будет ошибка
}
 
 
int probaprogressSsaita ()
{
 
  // Открываем файлы для заголовка и тела
 
  CURL *curl;
  CURLcode res = CURLE_OK;
  struct myprogress prog;
   std::string content;
  curl = curl_easy_init();
  if(curl) {
    prog.lastruntime = 0;
    prog.curl = curl;
 
    curl_easy_setopt(curl, CURLOPT_URL, "http://aihdownload.adobe.com/bin/live/install_flashplayer15x32au_mssa_aaa_aih.exe");
 
    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, older_progress);
    /* pass the struct pointer into the progress function */
    curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &prog);
#if LIBCURL_VERSION_NUM >= 0x072000
    curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, xferinfo);
    /* pass the struct pointer into the xferinfo function, note that this is
       an alias to CURLOPT_PROGRESSDATA */
    curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &prog);
#endif
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
   //   curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
    res = curl_easy_perform(curl);
 
    if(res != CURLE_OK)
      //printf(stderr, "%s\n", curl_easy_strerror(res));
      Form1->Memo1->Lines->Add(curl_easy_strerror(res));
    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return (int)res;
}
 
 
void __fastcall virtotal::Execute()
{
    //---- Place thread code here ----
}
//---------------------------------------------------------------------------
Мне выдает ошибку
C++
1
2
3
4
//вот здесь и выдает ошибку , 
   // E2268 Call to undefined function 'Synchronize'
   //строка 58
   Synchronize(&process);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2015, 13:11
Ответы с готовыми решениями:

Как из одной формы данные в Edit перенести?
У меня в одной форме данные из разных вкладок(Pages),при чем если активна одна вкладка из всех и соответственно данные этой вкладки...

Как перенести функцию в поток
Привет всем, я новичок в C# начал изучать потоки. Помогите пожалуйста перевести ниже привёднный код функции test в поток и как можно проще....

Как перенести рендер в другой поток
Нужно перенести весь процесс рендера в отдельный поток а саму геймформу не трогать. Ибо геймформа должна находится в потоке интерфейса, тк...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
27.02.2015, 13:19
Synchronize - метод класса TThread. И вызываться должен из тела наследника этого метода, то есть, например, из virtotal::Execute(), а не из простой callback-функции.
1
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
27.02.2015, 13:27  [ТС]
А как же мне перенести прогресс загрузки, он передается через callback?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2015, 13:27
Помогаю со студенческими работами здесь

Создать поток сжатия GZipStream, и перенести данные из открытого файла в поток GZipStream
Здравствуйте. Объясните мне пожалуйста следующую вещь: Необходимо открыть файл для чтения. Создать поток сжатия GZipStream, и перенести...

Как перенести значения из одного компонента одной формы в другой компонент другой формы?
В общем ситуация смешная для профи,делаю программу для редактирования и печати вкладышей для дипломов на PHP,сделал две формы,нужнго...

Как завершить поток из другой формы?
Имеется поток запущенный в Form1: Thread Worker = new Thread(Work); Worker.Start(); private void Work() { } ...

Как перенести данные формы в excel?
Нужно сделать так, что б данные формы падали в заготовленные места в шаблонной таблице, и готовый файл .xlsx падал пользователю в закачки,...

Как перенести данные с формы на форму
у меня есть 2 формы на первой textbox1 и button на второй label1 как сделать так что бы, я вводил данные в textbox1 нажимал на кнопку и они...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru