Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизТрабл с CreateThread ..... Plz, help! Найти похожие ветки
← →
Profffff (2004-07-07 15:38) [0]Создаю поток так:
CreateThread(nil, 0, @Session_Thread, @hClientSocket, 0, SessionThreadID);
Ф-ция Session_Thread имеет вид:
procedure Session_Thread(param: DWORD);
Переменная для передачи в дочерний поток hClientSocket типа 32-битное целое.
Проблема в том, что эта переменная НЕ передается по неизвестной причине в Session_Thread! Что не так?
← →
Тимохов © (2004-07-07 15:44) [1]
> Что не так?
не расшифорован термин "НЕ передается"
а вообще на фига вы указатель на переменную передаете, а не саму переменную? :))
переменная наверное локальная, в стеке - вот и лажа.
ЗЫ. Зачем изобретать велик - TThread чем не угодил?
← →
Digitman © (2004-07-07 15:49) [2]
> по неизвестной причине
не передается она по давно известной причине - нежелание читать справку или невнимательное чтение оной
а в справке черным по белому сказано, что прототипом поточной функциии (!!!!) должен быть тип
TThreadFunc = function(Param: Pointer): Integer; stdcall;
← →
y-soft © (2004-07-07 15:52) [3]>Profffff (07.07.04 15:38)
Используйте BeginThread
function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: LongWord): Integer;
Description
Use this routine or a TThread object to spawn separate threads of execution instead of calling the CreateThread Win32API directly. BeginThread encapsulates the Win32 CreateThread API call, but unlike CreateThread, it sets the global IsMultiThread variable, thereby making the heap thread-safe.
BeginThread takes a normal Pascal function as the thread function. Thread functions should handle all of their own exceptions. BeginThread sets up an exception frame that allows the system"s default exception handler to catch any of the thread"s exceptions that have not been handled.
Note: The application is terminated if there are any unhandled exceptions in the thread function.
← →
Profffff (2004-07-07 16:15) [4]Ясно. Переделал ф-цию в вид
function Session_Thread(Param: Pointer): Integer; stdcall;
а при создании этого потока сделал так:
CreateThread(nil, 0, @Session_Thread, @hClientSocket, 0, SessionThreadID);
где hClientSocket - целое
Получаю Param в Session_Thread. Как мне его обратно преобразовать в целое? У меня выдается не то значение почему-то!
← →
default © (2004-07-07 16:18) [5]Profffff (07.07.04 16:15) [4]
PInteger[PCardinal](Param)^ := NewValue
← →
Digitman © (2004-07-07 16:26) [6]CreateThread(nil, 0, @Session_Thread, Pointer(hClientSocket), 0, SessionThreadID);
function Session_Thread(hSocket: THandle): Integer; stdcall;
begin
..
end;
← →
Alive © (2004-07-08 12:41) [7]
> прототипом поточной функциии (!!!!) должен быть тип
Согласен, но у меня почему то работает так:
procedure SchedulerThread (pPntr: Pointer); stdcall;
← →
Digitman © (2004-07-08 12:45) [8]
> Alive © (08.07.04 12:41) [7]
угу.. работает .. до тех пор пока тебя не приспичит вернуть стандартным образом результат выполнения поточной ф-ции и получить его с пом. GetExitCodeThread()
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c