Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться и понять в чем я не прав... Найти похожие ветки
← →
Nikulin (2003-09-17 14:13) [0]Есть у меня такой модуль.
Возникает такая ошибка когда процедура из потока пытается обратиться к переменной..
*********************
Project LoadTraffic.exe faulted with message: "access violation at 0x00418b40: write of address 0x0000000c". Process Stopped. Use Step or Run to continue.
*********************
unit uFileLoad;
interface
uses Classes, Windows, SysUtils;
type
TFileLoad = class
private
ThreadID: LongWord;
ThreadHandle: THandle;
TestCounter: Cardinal;
protected
procedure Execute;
public
constructor Create();
destructor Destroy();
function Stop(): Boolean;
function Start(): Boolean;
end;
implementation
procedure TFileLoad.Execute;
var
Counter: Byte;
begin
Counter := 0;
// Здесь возникает ошибка доступа к переменной(см выше )
TestCounter := 0;
while True do
begin
if Counter < 2 then
begin
Inc(Counter);
Sleep(1000);
Continue;
end;
Counter := 0;
Inc(TestCounter);
if TestCounter >= 500 then TestCounter := 0;
end;
end;
procedure PollingFTP(AFileLoad: TFileLoad);
begin
AFileLoad.Execute;
end;
constructor TFileLoad.Create();
begin
ThreadHandle := CreateThread(nil, 0, @PollingFTP,
Pointer(Self), CREATE_SUSPENDED, ThreadID);
end;
function TFileLoad.Start(): Boolean;
begin
ResumeThread(ThreadHandle);
Result := True;
end;
function TFileLoad.Stop(): Boolean;
begin
TerminateThread(ThreadHandle, 0);
Result := True;
end;
destructor TFileLoad.Destroy();
begin
end;
end.
*********************
Создаю и вызываю обьект так...
FileLoad := TFileLoad.Create;
FileLoad.Start;
........
FileLoad.Stop;
FileLoad.Destroy;
Помогите, а?
← →
Palladin (2003-09-17 14:17) [1]Удивление вызывают декларации функций...
И кстати чем TThread не угодил?
← →
Nikulin (2003-09-17 14:20) [2]> Удивление вызывают декларации функций
А что удивительного?
← →
clickmaker (2003-09-17 14:27) [3]Семен Семеныч! А stdcall написать
function PollingFTP(Param: Pointer): Cardinal; stdcall
← →
Palladin (2003-09-17 14:28) [4]а то что так фукнции декларируются в C
← →
Nikulin (2003-09-17 14:47) [5]2 Palladin:
Спасибо за замечание. Касяк за мной :-)
← →
Nikulin (2003-09-17 14:48) [6]2 clickmaker:
Не могли бы Вы пояснить как влияет stdcall ...
Пожалуйста...
← →
clickmaker (2003-09-17 15:13) [7]MSDN:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);
lpStartAddress
Pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread. For more information on the thread function, see ThreadProc.
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);
WINAPI эквивалентно stdcall.
В принципе, любые функции обратного вызова, использующиеся в Win API, должны быть stdcall
← →
Nikulin (2003-09-17 15:33) [8]2 clickmaker: Спасибо.
← →
me (2003-09-17 15:44) [9]>Nikulin ©
Лучше пользоваться ф-ей BeginThread (System.pas),
если ты, конечно, хочешь, чтобы твой поток умел обрабатывать исключения.
Она, кстати, требует fastcall-функцию
← →
Владислав (2003-09-17 15:57) [10]"Прикольный" код...
← →
pasha_golub (2003-09-17 16:41) [11]Palladin по поводу TThread совершенно верное замечание привел
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c