C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Поток и ..., из потока не могу изменить текст в TEdit
Frolik
Отправлено: 13.07.2005, 15:00


Не зарегистрирован







Создаю поток:

DWORD __stdcall TestingThread(void* q)
{
....
Test->Edit->Text="sadf";
....
}
где Test — класс TForm

Компилится все нормально, но при выполнении кода вылетает ошибка
"access violation at 0x400d5ff0: read of address 0xbaffbd3f"

че делать?
Sl@Sh
Отправлено: 13.07.2005, 16:03


Мастер участка

Группа: Участник
Сообщений: 383



Синхронизировать пробовали ?
** pasha
Отправлено: 13.07.2005, 19:27


Не зарегистрирован







CODE

//   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 TFfffff::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
Frolik
Отправлено: 14.07.2005, 08:01


Не зарегистрирован







QUOTE (Sl@Sh @ 13/07/2005, 16:03)
Синхронизировать пробовали ?

Нет, не пробовал. А как это можно реализовать?

Synchronize(...); не подходит, вроде, т.к. я поток создавал апишной функцией CreateThread(...). Что мне делать?
GIZMO
Отправлено: 14.07.2005, 10:48


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Frolik @ 14/07/2005, 08:01)
QUOTE (Sl@Sh @ 13/07/2005, 16:03)
Синхронизировать пробовали ?

Нет, не пробовал. А как это можно реализовать?

Synchronize(...); не подходит, вроде, т.к. я поток создавал апишной функцией CreateThread(...). Что мне делать?

CODE

CRITICAL_SECTION CriticalSection;

void main()
{
   ...

   // Initialize the critical section one time only.
   if (!InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x80000400) )
       return;
   ...

   // Release resources used by the critical section object.
   DeleteCriticalSection(&CriticalSection)
}

DWORD WINAPI ThreadProc( LPVOID lpParameter )
{
   ...

   // Request ownership of the critical section.
   EnterCriticalSection(&CriticalSection);

   // Access the shared resource.

   // Release ownership of the critical section.
   LeaveCriticalSection(&CriticalSection);

   ...
}

или смотри, что предлагает BCB TCriticalSection, TEvent в syncobjs.hpp
Guest
Отправлено: 14.07.2005, 11:12


Не зарегистрирован







QUOTE
Synchronize(...); не подходит, вроде, т.к. я поток создавал апишной функцией CreateThread(...). Что мне делать?


Создать поток Билдеровскими функциями.
vvoid
Отправлено: 14.07.2005, 18:47


Машинист паровоза

Группа: Участник
Сообщений: 171



Передайте в поток указатель на TEdit, а потом заполняйте.
Может получится!

Для синхронизации при помощи API функций читайте про WaitForSingleObject и т.д.
Sl@Sh
Отправлено: 15.07.2005, 02:50


Мастер участка

Группа: Участник
Сообщений: 383



Синхронизации можно добится критическими разделами или взаимоисключениями. Поройте в этом направлении. В хелпе вроде всё есть.

Вернуться в Вопросы программирования в C++Builder