multithreading - Creating NewTask in a For Loop using Omnithread Library -


am writing program detects usb insertion , saves inserted drive(s) stringlist. want create newtask or background worker each content of stringlist, start them , wait till task finishes using omnithread library.

here code snippet

uses    winapi.windows, winapi.messages, system.sysutils, system.classes,   winapi.shellapi, otlcommon,   otlcollections,   otlparallel, vcl.dialogs;  procedure tusb.wmdevicechange(var msg: tmessage); var   lpdbhheader: pdevbroadcastheader;   resstringlist, tempsenderlist: tstringlist;   i: integer;  begin   lpdbhheader := pdevbroadcastheader(msg.lparam);   resstringlist := tstringlist.create;   tempsenderlist := tstringlist.create;   resstringlist.clear;   tempsenderlist.clear;    try     case msg.wparam of       dbt_devicearrival:         begin           if (lpdbhheader^.dbch_devicetype = dbt_devtyp_volume)           begin              sleep(2000);             // procedure connected usb devices , save stringlist              (getdrive(pdevbroadcastvolume(msg.lparam), resstringlist));              := 0 resstringlist.count - 1             begin               { how create newtask or                 background worker each content in resstringlist                 execute walkdirectory , parallel.foreach(0, tempsenderlist.count - 1)                 in newtask? }                // procedure recurse content of usb drive , save tempsenderlist                walkdirectory(excludetrailingpathdelimiter(resstringlist.strings                 [i]), tempsenderlist);                parallel.foreach(0, tempsenderlist.count - 1).execute(                 procedure(const value: integer)                 begin                    // dosomething(tempsenderlist[value]);                  end);                showmessage(tempsenderlist.text);              end;            end;         end;       dbt_deviceremovecomplete:         begin           if (lpdbhheader^.dbch_devicetype = dbt_devtyp_volume)           begin             // showmessage('removed');           end;          end;     end;       resstringlist.free;     tempsenderlist.free;   end;  end; 

using delphi xe7 , omnithread library v3.04.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -