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
|
Синхронизации можно добится критическими разделами или взаимоисключениями. Поройте в этом направлении. В хелпе вроде всё есть.
|
|