小编BF2*_*015的帖子

需要帮助Delphi多线程文件编写

我正在写一个Delphi dll,它计算并将结果写入CSV文件.调用程序是多线程的,因此一个问题是同时多次写入文件会导致调用程序崩溃.我试图使用临界区来锁定文件写入,但仍然会发生崩溃.如果我将程序配置为仅使用一个线程,则问题将消失.以下是我的代码:

    library Question;

    uses
      SysUtils,
      Classes,
      Math,
      SyncObjs;

    {$R *.res}

    Var

        Outputfile: textfile;

        CriticalSection: TCriticalSection;

        CalNumb: integer = 0;

        PrintString: String;

    Threadvar

    Cal1, Cal2, Cal1Last: double;

    Function Calculator (input1, input2, input3, input4: double; 
    Factor: double; LastCal: Boolean; Print: integer): double stdcall;

    Const
        Divisor = 4;
    Var
        Temp: double;
    Begin

    Cal1Last:= Cal1;
    Cal1:= (input1+ input2+input3+ input4)/Divisor;
    Cal2:= (Cal1+Factor*Cal1Last)/2;
    Temp:= Cal2 - Cal1Last;

          If LastCal and (Print = 1) then
                begin

                  CriticalSection:= TCriticalSection.Create;
                  Try
                    Try
                      Inc(CalNumb);
                      Assign(Outputfile, 'C:\Calculator\Result.csv');
                      If FileExists('C:\Calculator\Result.csv') then …
Run Code Online (Sandbox Code Playgroud)

delphi io multithreading writing file

0
推荐指数
1
解决办法
661
查看次数

标签 统计

delphi ×1

file ×1

io ×1

multithreading ×1

writing ×1