Указатель На Константу

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 9 окт 2011.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    В общем, в универе по C++ изучаем работу с потоками и там приводился вызов функции создания потока:
    Код (C++):
    HANDLE hThread = CreateThread(NULL, 0, FactThread, (LPVOID) 10, 0, NULL);
    Естественно, в качестве тренировки я решил повытворять такие же вещи в Delphi. Но вот вопрос, как я могу передать в функцию CreateThread в Delphi указатель на число? Вот код, который у меня вышел:
    Код (Delphi):
    program MyFirsthThread;

    {$APPTYPE CONSOLE}

    uses
    SysUtils, Windows;

    function FactThread(pn: Pointer): Integer; stdcall;
    var
    i, f, n: Integer;
    begin
    n := Integer(pn^);
    f := 1;
    for i := 2 to n do
    f := f * i;
    Integer(pn^) := f;
    FactThread := 0;
    end;

    var
    p: Integer;
    id: LongWord;
    hThread: THandle;
    begin
    p := 10;
    hThread := CreateThread(nil, 0, @FactThread, @p, CREATE_SUSPENDED, id);
    ResumeThread(hThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    writeln(p);
    ReadLn;
    end.
    Но в моём коде мне пришлось ввести переменную и присвоить ей значение 10, а затем передать её адрес уже в функцию. Вот вопрос, можно ли обойтись без создания переменной? Почему в C++ указатель на число нормально работает, а в Delphi - нет (или я не знаю просто, как правильно такую конструкцию написать). Помогите, пожалуйста. Заранее спасибо!

    Сорри, проблему уже решил. Стоило просто написать Pointer(10), а в потоковой функции убрать крышку у pn :lovecodeby:
     
Загрузка...

Поделиться этой страницей