powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / 2 klassa
25 сообщений из 30, страница 1 из 2
2 klassa
    #34094987
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vecher dobrij. Situacija sledujuschaja. Ispolzujetsja C++ Builder 6. Jestj forma, na kotoroj raspolozheni graficheskije elementi i komponenti dostupa k baze dannih tipa ADOConnection, ADOQuery. V drugom module objavlen klass na baze TThread. V kotorom v procedure Execute idjet kod, kotorij obraschajetsja k komponentam raspolozhennim na forme
Код: plaintext
1.
   FilterForm->ADOConnection3->Connected=true;
V module CopyDt.h v nachale jestj svjazj s modulem filter.h
Код: plaintext
#include "filter.h"
i naoborot
Код: plaintext
#include "copydt.h"
problemma v tom chto kogda vizivajetsja kod:
Код: plaintext
FilterForm->ADOConnection3->Connected=true;
viskakivajet access violation. Potok zapuskajetsja v pri sozdanii formi:
Код: plaintext
1.
2.
3.
void __fastcall TFilterForm::FormShow(TObject *Sender)
{
   TCopyData *CopyIt=new TCopyData(false);
}
gde TCopyData javljajetsja "naslednikom" klassa TThread
...
Рейтинг: 0 / 0
2 klassa
    #34095000
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай про Synchronize (метод потока)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095004
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вобще, обращаться к глобальным переменным из потока надо, используя синхронизацию доступа к ним.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095022
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
u menja zapuskajetsja tolko odin potok. Vtorogo net. On prosto dolzhen perekopirovatj neobhodimije dlja raboti dannije na fone, poka polzovatelj filtri nastraivajet. V eto vremja k etim komponentam ni odna procedura ne obraschajetsja
...
Рейтинг: 0 / 0
2 klassa
    #34095034
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenVtorogo netесть, вернее есть первый, а ты запускаешь второй
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095040
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a kogda umudrjajetsja pervij zapustitsja? Etot kod + esche opredelenije funkcii Execute() vsje chto vpisano:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class TCopyData : public TThread
{            
private:
protected:
   void __fastcall Execute();
public:
   __fastcall TCopyData(bool CreateSuspended);
};
...
Рейтинг: 0 / 0
2 klassa
    #34095048
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
izvinjajusj konechno za svoje neznanije, no ja s Thread'ami rabotal tolko v Java
...
Рейтинг: 0 / 0
2 klassa
    #34095055
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravena kogda umudrjajetsja pervij zapustitsja?напряги мозг :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095064
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jesli chestno, ne vjezhaju, na OnShow, jedinstvennoje mesto gde u menja jemu prisvaivajetsja peremennaja i zapuskajetsja konstruktor. Nu ne znaju ja.
...
Рейтинг: 0 / 0
2 klassa
    #34095080
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще главный поток ....

C++Builder HelpTThread::Synchronize
.......
Execution of the thread is suspended while Method is executing in the main VCL thread
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095087
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blin, v Java takogo ne bilo. Tam nuzhna bila sinhornizacija tolko jesli 2 potok ana odin resurs kidalisj.
...
Рейтинг: 0 / 0
2 klassa
    #34095097
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenTam nuzhna bila sinhornizacija tolko jesli 2 potok ana odin resursну дак тут та же ситуация.
Есть главный поток процесса. Ты запускаешь дополнительный поток (кстати, зачем ? может и не надо этого ?)
Надо разделять доступ к глобальной переменной FilterForm, чтобы 2 потока не ломились к ней одновременно. VCL так устроена, она не ThreadSafe
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34095214
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A chto delatj s peremennoj, kotoraja v Synchronize peredajetsja? V helpe pro etot tip dannih nichego net. A v primere PushThe Button stoit, no chto eto takoje ne doganjaju.
...
Рейтинг: 0 / 0
2 klassa
    #34095283
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sdelal sledujuschim makarom, kak v primere:
Код: plaintext
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.
void __fastcall TCopyData::Execute()
{
   //---- Place thread code here ----
   Synchronize(Cop);
}
//---------------------------------------------------------------------------


void TCopyData::Cop(void)
{
   //TODO: Add your source code here
   AnsiString S;
   FilterForm->ADOConnection3->Connected=true;
   FilterForm->ADOQuery1->Active=true;
   S=DateToStr(FilterForm->ADOQuery1->Parameters->Items[ 0 ]->Value);


   for(int x= 0 ; x<FilterForm->ADOQuery1->RecordCount; x++){
      if(x!= 0 ){
         FilterForm->ADOQuery1->Next();
      }
      FilterForm->ProgressBar1->Max=FilterForm->ADOQuery1->RecordCount;
      FilterForm->ProgressBar1->Position=x;
//      Refresh();
      FilterForm->ADOQuery2->Parameters->Items[ 0 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 0 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 1 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 1 ]->AsDateTime;
      FilterForm->ADOQuery2->Parameters->Items[ 2 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 2 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 3 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 3 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 4 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 4 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 5 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 5 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 6 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 6 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 7 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 7 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 8 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 8 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 9 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 9 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 10 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 10 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 11 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 11 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 12 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 12 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 13 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 13 ]->AsInteger;
      FilterForm->ADOQuery2->Parameters->Items[ 14 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 14 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 15 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 15 ]->AsFloat;
      FilterForm->ADOQuery2->Parameters->Items[ 16 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 16 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 17 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 17 ]->AsInteger;
      FilterForm->ADOQuery2->Parameters->Items[ 18 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 18 ]->AsInteger;
      FilterForm->ADOQuery2->Parameters->Items[ 19 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 19 ]->AsInteger;
      FilterForm->ADOQuery2->Parameters->Items[ 20 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 20 ]->AsString;
      FilterForm->ADOQuery2->Parameters->Items[ 21 ]->Value=FilterForm->ADOQuery1->Fields->Fields[ 21 ]->AsString;
      FilterForm->ADOQuery2->ExecSQL();
   }
}
vikidivajet oshibku:
[C++ Error] CopyDt.cpp(32): E2342 Type mismatch in parameter 'Method' (wanted 'void (_fastcall * (_closure )())()', got 'void')
...
Рейтинг: 0 / 0
2 klassa
    #34095316
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pered proceduroj Cop dobavil fastcall, vernulasj staraja problemma access violation
...
Рейтинг: 0 / 0
2 klassa
    #34095349
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven dr> pered proceduroj Cop dobavil fastcall, vernulasj staraja
dr> problemma access violationможет у тебя объект не создан еще, когда ты к нему обращаешься
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34096744
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Objekt sozdan. U menja pered vizovom Thread kopirujetsja esche neskolko tablic v evente OnShow, TADOConnection i drugije takzhe raspolozheni na forme. Eti ja delal bez Thread, t.k. kopirujutsja paru desjatkov zapisej. A to chto pihaju vo Thread, tam idjet kopirovanije neskolkih desjatkov tisjach zapisej, chto proishodit dovolno-taki ne bistro.
...
Рейтинг: 0 / 0
2 klassa
    #34096754
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chtobi bilo luche vidno, vot kod polnij OnShow:
Код: plaintext
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.
void __fastcall TFilterForm::FormShow(TObject *Sender)
{
   ADOConnection1->Connected=true;
   Vietas->Active=true;
   ADOConnection2->Connected=true;

   for (int x= 0 ; x<Vietas->RecordCount; x++){
      if(x!= 0 ){
         Vietas->Next();
      }
      VietasInsert->Parameters->Items[ 0 ]->Value=Vietas->Fields->Fields[ 0 ]->AsInteger;
      VietasInsert->Parameters->Items[ 1 ]->Value=Vietas->Fields->Fields[ 1 ]->AsString;
      VietasInsert->Parameters->Items[ 2 ]->Value=Vietas->Fields->Fields[ 2 ]->AsString;
      VietasInsert->Parameters->Items[ 3 ]->Value=true;
      VietasInsert->ExecSQL();
   }
   Vietas->Active=false;
   VietasSel->Active=true;

   TypApr->Active=true;
   for (int x= 0 ; x<TypApr->RecordCount; x++){
      if(x!= 0 ){
         TypApr->Next();
      }
      TypAprInsert->Parameters->Items[ 0 ]->Value=TypApr->Fields->Fields[ 0 ]->AsInteger;
      TypAprInsert->Parameters->Items[ 1 ]->Value=TypApr->Fields->Fields[ 1 ]->AsString;
      TypAprInsert->ExecSQL();
   }
   TypApr->Active=false;

   TypPlt->Active=true;
   for (int x= 0 ; x<TypPlt->RecordCount; x++){
      if(x!= 0 ){
         TypPlt->Next();
      }
      TypPltInsert->Parameters->Items[ 0 ]->Value=TypPlt->Fields->Fields[ 0 ]->AsInteger;
      TypPltInsert->Parameters->Items[ 1 ]->Value=TypPlt->Fields->Fields[ 1 ]->AsString;
      TypPltInsert->ExecSQL();
   }
   TypPlt->Active=false;

   TCopyData *CopyIt=new TCopyData(false);
}

A eto vizivajetsja v nej Thread.
Код: plaintext
 TCopyData *CopyIt=new TCopyData(false);
...
Рейтинг: 0 / 0
2 klassa
    #34096881
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй писать логи, чтобы понять, на какой именно строчке вываливается
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34096896
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vivalivajetsja v samom Thread kogda obraschajeshsja k TADOConnection
Код: plaintext
FilterForm->ADOConnection3->Connected=true;
...
Рейтинг: 0 / 0
2 klassa
    #34098169
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A ne mozhet bitj takogo, chto kogda on obraschajetsja k forme cherez peremennuju FilterForm ona ravna null, t.e. obraschajetsja ne k toj oblasti pamjati. Jesli da, to mozhet kak-to mozhno ispolzovatj chto-nibudj v stile this->ADOConnection3->connected=true. Tolko vmesto this drugoje kljuchevoje slovo, ukazivajuscheje imenno na tu oblastj pamjati, v kotoroj raspolozhena sozdannaja forma?
...
Рейтинг: 0 / 0
2 klassa
    #34098377
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Schas proveril FilterForm pochemu-to dejstvitelno raven NULL. Hotja v obrabotke even'a OnShow posatvil this, vidal adres pamjati, kak i dolzhno bitj. Mozhet mozhno etot adres peredatj kak-nibudj v potok ne ispolzuja globalnih peremennih? Drugogo varianta mne v golovu prosto ne idjet
...
Рейтинг: 0 / 0
2 klassa
    #34098422
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven dr> Mozhet mozhno etot adres peredatj kak-nibudj v potok ne ispolzuja
dr> globalnih peremennih?что мешает попробовать ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
2 klassa
    #34098448
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
somnenije. FilterForm uzhe objavlena kak globalnaja peremennaja samim C++ Builderom, v rodnom module. No potoku na eto naplevatj. On jeje vidit kak Null. Schas pitalsja vnutri potoka objavitj peremennuju tipa TFilterForm no on vidajet oshibku Type name expected
...
Рейтинг: 0 / 0
2 klassa
    #34098475
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenType name expected
#include "filterform.h"
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / 2 klassa
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]