Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Трабл с 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 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
4-1089718674
rOOse
2004-07-13 15:37
2004.08.22
Нажатие на кнопку. WinApi


14-1091742784
Andy BitOff
2004-08-06 01:53
2004.08.22
Администрирование WinXP


1-1091703629
Spike
2004-08-05 15:00
2004.08.22
Открыть папку и выделить в ней нужный мне файл...


6-1086611446
TSa
2004-06-07 16:30
2004.08.22
Узнать логин с которым входили в систему ?


14-1091075206
Kerk
2004-07-29 08:26
2004.08.22
skype