comp.lang.ada
 help / color / mirror / Atom feed
* Win32.   Task or CreateThread
@ 2016-08-02 14:38 George J
  2016-08-02 15:22 ` Dmitry A. Kazakov
  2016-08-03 20:31 ` Aurele
  0 siblings, 2 replies; 12+ messages in thread
From: George J @ 2016-08-02 14:38 UTC (permalink / raw)


Hi All!I have Windows GUI application (GTK) with very busy proc calling by clicking button,
like
----------
procedure Test_Busy is
begin
  for K in 1..10000000 loop
    Ada.TextIO.Pul_Line(K'Img);
  end loop;
end Test_Busy;
---------
And I want to make this procedure not to "freeze" window while executing. I have an experience with CreateThread winapi, and all will be ok, and window will be dragable while running procedure Test_Busy. I've only read about tasking and I've tried yet to do some with it. And I can't understand its mechanism. Is it creates a new thread in Windows when executing? And will I get the effect like calling CreateThread? Thanks.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-02 14:38 Win32. Task or CreateThread George J
@ 2016-08-02 15:22 ` Dmitry A. Kazakov
  2016-08-02 16:39   ` George J
                     ` (2 more replies)
  2016-08-03 20:31 ` Aurele
  1 sibling, 3 replies; 12+ messages in thread
From: Dmitry A. Kazakov @ 2016-08-02 15:22 UTC (permalink / raw)


On 2016-08-02 16:38, George J wrote:
> Hi All!I have Windows GUI application (GTK) with very busy proc calling by clicking button,
> like
> ----------
> procedure Test_Busy is
> begin
>   for K in 1..10000000 loop
>     Ada.TextIO.Pul_Line(K'Img);
>   end loop;
> end Test_Busy;
> ---------
> And I want to make this procedure not to "freeze" window while
> executing. I have an experience with CreateThread winapi, and all will
> be ok, and window will be dragable while running procedure Test_Busy.
> I've only read about tasking and I've tried yet to do some with it. And
> I can't understand its mechanism. Is it creates a new thread in Windows
> when executing? And will I get the effect like calling CreateThread? Thanks.

Under Windows with GNAT the effect of task creation is one of a thread.

Since you are using GTK be aware that GTK is not thread-safe. You may 
not call any GTK (also GLib, GObject etc) operations from a thread/task 
that does not run the main GTK loop.

So if you want the task to report back to GTK in any way (e.g. by moving 
the progress bar) you must do it by communicating with the task running 
the main loop. You can find an example how do do this here:

http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm#1.1

Note that even if the task does not report back, you will need some kind 
of communication, at least in order to be able to end the process when 
the task is still active. In Ada the master task awaits completion of 
other tasks. Thus from the GTK's destroy handler you might wish to tell 
your second task to kill itself. Otherwise the effect will be that the 
application window will be closed by the process will linger until the 
task completes.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-02 15:22 ` Dmitry A. Kazakov
@ 2016-08-02 16:39   ` George J
  2016-08-03 17:31   ` George J
  2016-08-05  4:25   ` George J
  2 siblings, 0 replies; 12+ messages in thread
From: George J @ 2016-08-02 16:39 UTC (permalink / raw)


вторник, 2 августа 2016 г., 18:23:00 UTC+3 пользователь Dmitry A. Kazakov написал:
> On 2016-08-02 16:38, George J wrote:
> > Hi All!I have Windows GUI application (GTK) with very busy proc calling by clicking button,
> > like
> > ----------
> > procedure Test_Busy is
> > begin
> >   for K in 1..10000000 loop
> >     Ada.TextIO.Pul_Line(K'Img);
> >   end loop;
> > end Test_Busy;
> > ---------
> > And I want to make this procedure not to "freeze" window while
> > executing. I have an experience with CreateThread winapi, and all will
> > be ok, and window will be dragable while running procedure Test_Busy.
> > I've only read about tasking and I've tried yet to do some with it. And
> > I can't understand its mechanism. Is it creates a new thread in Windows
> > when executing? And will I get the effect like calling CreateThread? Thanks.
> 
> Under Windows with GNAT the effect of task creation is one of a thread.
> 
> Since you are using GTK be aware that GTK is not thread-safe. You may 
> not call any GTK (also GLib, GObject etc) operations from a thread/task 
> that does not run the main GTK loop.
> 
> So if you want the task to report back to GTK in any way (e.g. by moving 
> the progress bar) you must do it by communicating with the task running 
> the main loop. You can find an example how do do this here:
> 
> http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm#1.1
> 
> Note that even if the task does not report back, you will need some kind 
> of communication, at least in order to be able to end the process when 
> the task is still active. In Ada the master task awaits completion of 
> other tasks. Thus from the GTK's destroy handler you might wish to tell 
> your second task to kill itself. Otherwise the effect will be that the 
> application window will be closed by the process will linger until the 
> task completes.
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

Thanks Dmitry! Yes, i'm making drive parser with progressbar.I'll read your example.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-02 15:22 ` Dmitry A. Kazakov
  2016-08-02 16:39   ` George J
@ 2016-08-03 17:31   ` George J
  2016-08-03 19:43     ` Dmitry A. Kazakov
  2016-08-05  4:25   ` George J
  2 siblings, 1 reply; 12+ messages in thread
From: George J @ 2016-08-03 17:31 UTC (permalink / raw)


вторник, 2 августа 2016 г., 18:23:00 UTC+3 пользователь Dmitry A. Kazakov написал:
> On 2016-08-02 16:38, George J wrote:
> > Hi All!I have Windows GUI application (GTK) with very busy proc calling by clicking button,
> > like
> > ----------
> > procedure Test_Busy is
> > begin
> >   for K in 1..10000000 loop
> >     Ada.TextIO.Pul_Line(K'Img);
> >   end loop;
> > end Test_Busy;
> > ---------
> > And I want to make this procedure not to "freeze" window while
> > executing. I have an experience with CreateThread winapi, and all will
> > be ok, and window will be dragable while running procedure Test_Busy.
> > I've only read about tasking and I've tried yet to do some with it. And
> > I can't understand its mechanism. Is it creates a new thread in Windows
> > when executing? And will I get the effect like calling CreateThread? Thanks.
> 
> Under Windows with GNAT the effect of task creation is one of a thread.
> 
> Since you are using GTK be aware that GTK is not thread-safe. You may 
> not call any GTK (also GLib, GObject etc) operations from a thread/task 
> that does not run the main GTK loop.
> 
> So if you want the task to report back to GTK in any way (e.g. by moving 
> the progress bar) you must do it by communicating with the task running 
> the main loop. You can find an example how do do this here:
> 
> http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm#1.1
> 
> Note that even if the task does not report back, you will need some kind 
> of communication, at least in order to be able to end the process when 
> the task is still active. In Ada the master task awaits completion of 
> other tasks. Thus from the GTK's destroy handler you might wish to tell 
> your second task to kill itself. Otherwise the effect will be that the 
> application window will be closed by the process will linger until the 
> task completes.
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

Dmitry, I've made some examples,works great!Thanks!And I have one question to understand. Function Gtk.Main.Routers.Init has Delay parameter 0.2 by default. So, to make my parsing function faster I have to decrease this value to 0.001 or 0.00001, am I right? Or is there any function or solution for more "automatical minimal time delay" without my intervention? Hope I understandable with my english/


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-03 17:31   ` George J
@ 2016-08-03 19:43     ` Dmitry A. Kazakov
  2016-08-04  2:42       ` George J
  0 siblings, 1 reply; 12+ messages in thread
From: Dmitry A. Kazakov @ 2016-08-03 19:43 UTC (permalink / raw)


On 2016-08-03 19:31, George J wrote:

> Dmitry, I've made some examples,works great!Thanks!And I have one
> question to understand. Function Gtk.Main.Routers.Init has Delay
> parameter 0.2 by default.

Yes, that parameter controls the timer set in the GTK main. It rarely 
need to be faster because except for running curves (e.g. in an 
oscilloscope) human eye cannot catch higher frequencies anyway.

> So, to make my parsing function faster I have
> to decrease this value to 0.001 or 0.00001, am I right?

No. 1ms (0.001) is the hard limit for thread switching under Windows 
anyway, while 10ms is the default. Even a real-time OS would choke at 
10us timer interrupts.

> Or is there any
> function or solution for more "automatical minimal time delay" without
> my intervention?

Usually you accumulate changes and report them at the fixed rate 
comfortable for the user. E.g. if you have a tight loop:

declare
    Last_Time : Time := Clock;
    This_Time : Time;
begin
    loop
       calculate things ...

       This_Time := Clock;
       if This_Time - Last_Time > 0.2 then
          report state change to the GUI ...
          Last_Time := This_Time;
       end if;
    end loop;

You might further filter out small changes, e.g. if, say, the progress 
bar change is under 1%, you ignore it.

Another technique is to run GUI with its own refresh rate and exchange 
data through shared object (e.g. protected object or protected by a 
mutex object).

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32.   Task or CreateThread
  2016-08-02 14:38 Win32. Task or CreateThread George J
  2016-08-02 15:22 ` Dmitry A. Kazakov
@ 2016-08-03 20:31 ` Aurele
  2016-08-04  2:41   ` George J
  1 sibling, 1 reply; 12+ messages in thread
From: Aurele @ 2016-08-03 20:31 UTC (permalink / raw)


declare
Start_Time : Ada.Real_Time.Time;
      Stop_Time  : Ada.Real_Time.Time;


loop

  Start_Time := Ada.Real_Time.Clock;

  Do_Stuff'

  Stop_Time        := Ada.Real_Time.Clock; 
  Performance_Time := Ada.Real_Time.To_Duration( Stop_Time - Start_Time ); 

  while Performance_Time < 0.2 loop  -- Delay...
    Winbase.Sleep( 0 );  -- This is a Windows function
    Stop_Time := Ada.Real_Time.Clock; 
    Performance_Time := Ada.Real_Time.To_Duration( Stop_Time - Start_Time ); 
  end loop;
          
end loop;
  

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32.   Task or CreateThread
  2016-08-03 20:31 ` Aurele
@ 2016-08-04  2:41   ` George J
  0 siblings, 0 replies; 12+ messages in thread
From: George J @ 2016-08-04  2:41 UTC (permalink / raw)


среда, 3 августа 2016 г., 23:31:11 UTC+3 пользователь Aurele написал:
> declare
> Start_Time : Ada.Real_Time.Time;
>       Stop_Time  : Ada.Real_Time.Time;
> 
> 
> loop
> 
>   Start_Time := Ada.Real_Time.Clock;
> 
>   Do_Stuff'
> 
>   Stop_Time        := Ada.Real_Time.Clock; 
>   Performance_Time := Ada.Real_Time.To_Duration( Stop_Time - Start_Time ); 
> 
>   while Performance_Time < 0.2 loop  -- Delay...
>     Winbase.Sleep( 0 );  -- This is a Windows function
>     Stop_Time := Ada.Real_Time.Clock; 
>     Performance_Time := Ada.Real_Time.To_Duration( Stop_Time - Start_Time ); 
>   end loop;
>           
> end loop;

Thanks, Aurele!

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-03 19:43     ` Dmitry A. Kazakov
@ 2016-08-04  2:42       ` George J
  0 siblings, 0 replies; 12+ messages in thread
From: George J @ 2016-08-04  2:42 UTC (permalink / raw)


среда, 3 августа 2016 г., 22:43:25 UTC+3 пользователь Dmitry A. Kazakov написал:
> On 2016-08-03 19:31, George J wrote:
> 
> > Dmitry, I've made some examples,works great!Thanks!And I have one
> > question to understand. Function Gtk.Main.Routers.Init has Delay
> > parameter 0.2 by default.
> 
> Yes, that parameter controls the timer set in the GTK main. It rarely 
> need to be faster because except for running curves (e.g. in an 
> oscilloscope) human eye cannot catch higher frequencies anyway.
> 
> > So, to make my parsing function faster I have
> > to decrease this value to 0.001 or 0.00001, am I right?
> 
> No. 1ms (0.001) is the hard limit for thread switching under Windows 
> anyway, while 10ms is the default. Even a real-time OS would choke at 
> 10us timer interrupts.
> 
> > Or is there any
> > function or solution for more "automatical minimal time delay" without
> > my intervention?
> 
> Usually you accumulate changes and report them at the fixed rate 
> comfortable for the user. E.g. if you have a tight loop:
> 
> declare
>     Last_Time : Time := Clock;
>     This_Time : Time;
> begin
>     loop
>        calculate things ...
> 
>        This_Time := Clock;
>        if This_Time - Last_Time > 0.2 then
>           report state change to the GUI ...
>           Last_Time := This_Time;
>        end if;
>     end loop;
> 
> You might further filter out small changes, e.g. if, say, the progress 
> bar change is under 1%, you ignore it.
> 
> Another technique is to run GUI with its own refresh rate and exchange 
> data through shared object (e.g. protected object or protected by a 
> mutex object).
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

Ok,Dmitry,thanks a lot!


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-02 15:22 ` Dmitry A. Kazakov
  2016-08-02 16:39   ` George J
  2016-08-03 17:31   ` George J
@ 2016-08-05  4:25   ` George J
  2016-08-05  6:15     ` George J
  2016-08-05  6:17     ` Dmitry A. Kazakov
  2 siblings, 2 replies; 12+ messages in thread
From: George J @ 2016-08-05  4:25 UTC (permalink / raw)


> So if you want the task to report back to GTK in any way (e.g. by moving 
> the progress bar) you must do it by communicating with the task running 
> the main loop. You can find an example how do do this here:
> 
> http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm#1.1
> .......
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

Hi All! I have a question for Gtk.Main.Routers, that i can't understand.
I have next:

type My_Record is
record
.......
end record

type My_Record_Access is access all My_Record;

Test_Record_Access : My_Record_Access;

package Cb_Request is new Gtk.Main.Router.Generic_Callback_Request(User_Data => My_Record);

   task type My_Task is  -- works well
      entry Start;
   end My_Task;

   task body My_Task is
   begin
      accept Start;

      Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- all ok

   end My_Task;


But I need to send parameter to discriminant like this 
.. in some proc 
Some_Task.Start(Test_Record_Access)

and decl:

   task type My_Task is  -- works bad
      entry Start(Rec_Acc:My_Record_Access);
   end My_Task;

   task body My_Task is
   begin
      accept Start(Rec_Acc:My_Record_Access) do
         Cb_Request.Request(Some_Proc'Access,Rec_Acc); -- "freezed"
      end Start;
   end My_Task;


-----------
I've debugged code and found:
...Gtk.Main.Routers(448)

procedure Request (Data : in out Request_Data'Class) is
   begin
      if Main = Current_Task then
         Service (Data);
      elsif Main = Null_Task_ID then
         Log
         (  GtkAda_Contributions_Domain,
            Log_Level_Critical,
            "No main task active" & Where ("Request")
         );
         raise Program_Error;
      else
         Gateway.Request_Service (Data, Standard.True);--<<---STOPPED HERE!!!!
      end if;
   end Request;

So I can understand, why it happened?can smb help with this!Thanks!


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-05  4:25   ` George J
@ 2016-08-05  6:15     ` George J
  2016-08-05  6:17     ` Dmitry A. Kazakov
  1 sibling, 0 replies; 12+ messages in thread
From: George J @ 2016-08-05  6:15 UTC (permalink / raw)


пятница, 5 августа 2016 г., 7:25:45 UTC+3 пользователь George J написал:
> > So if you want the task to report back to GTK in any way (e.g. by moving 
> > the progress bar) you must do it by communicating with the task running 
> > the main loop. You can find an example how do do this here:
> > 
> > http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm#1.1
> > .......
> > 
> > -- 
> > Regards,
> > Dmitry A. Kazakov
> > http://www.dmitry-kazakov.de
> 
> Hi All! I have a question for Gtk.Main.Routers, that i can't understand.
> I have next:
> 
> type My_Record is
> record
> .......
> end record
> 
> type My_Record_Access is access all My_Record;
> 
> Test_Record_Access : My_Record_Access;
> 
> package Cb_Request is new Gtk.Main.Router.Generic_Callback_Request(User_Data => My_Record);
> 
>    task type My_Task is  -- works well
>       entry Start;
>    end My_Task;
> 
>    task body My_Task is
>    begin
>       accept Start;
> 
>       Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- all ok
> 
>    end My_Task;
> 
> 
> But I need to send parameter to discriminant like this 
> .. in some proc 
> Some_Task.Start(Test_Record_Access)
> 
> and decl:
> 
>    task type My_Task is  -- works bad
>       entry Start(Rec_Acc:My_Record_Access);
>    end My_Task;
> 
>    task body My_Task is
>    begin
>       accept Start(Rec_Acc:My_Record_Access) do
>          Cb_Request.Request(Some_Proc'Access,Rec_Acc); -- "freezed"
>       end Start;
>    end My_Task;
> 
> 
> -----------
> I've debugged code and found:
> ...Gtk.Main.Routers(448)
> 
> procedure Request (Data : in out Request_Data'Class) is
>    begin
>       if Main = Current_Task then
>          Service (Data);
>       elsif Main = Null_Task_ID then
>          Log
>          (  GtkAda_Contributions_Domain,
>             Log_Level_Critical,
>             "No main task active" & Where ("Request")
>          );
>          raise Program_Error;
>       else
>          Gateway.Request_Service (Data, Standard.True);--<<---STOPPED HERE!!!!
>       end if;
>    end Request;
> 
> So I can understand, why it happened?can smb help with this!Thanks!

Oh, I've got another one! if i change

task body My_Task is
    begin
       accept Start; 
         Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- all ok 
    end My_Task;

to 

task body My_Task is
    begin
       accept Start do 
         Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- becomes "freezed"
       end Start;
    end My_Task;

i cant exec my proc again.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-05  4:25   ` George J
  2016-08-05  6:15     ` George J
@ 2016-08-05  6:17     ` Dmitry A. Kazakov
  2016-08-05  6:48       ` George J
  1 sibling, 1 reply; 12+ messages in thread
From: Dmitry A. Kazakov @ 2016-08-05  6:17 UTC (permalink / raw)


On 2016-08-05 06:25, George J wrote:

> Hi All! I have a question for Gtk.Main.Routers, that i can't understand.
> I have next:
>
> type My_Record is
> record
> .......
> end record
>
> type My_Record_Access is access all My_Record;
>
> Test_Record_Access : My_Record_Access;
>
> package Cb_Request is new Gtk.Main.Router.Generic_Callback_Request(User_Data => My_Record);
>
>    task type My_Task is  -- works well
>       entry Start;
>    end My_Task;
>
>    task body My_Task is
>    begin
>       accept Start;
>
>       Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- all ok
>
>    end My_Task;
>
> But I need to send parameter to discriminant like this
> .. in some proc
> Some_Task.Start(Test_Record_Access)
>
> and decl:
>
>    task type My_Task is  -- works bad
>       entry Start(Rec_Acc:My_Record_Access);
>    end My_Task;
>
>    task body My_Task is
>    begin
>       accept Start(Rec_Acc:My_Record_Access) do
>          Cb_Request.Request(Some_Proc'Access,Rec_Acc); -- "freezed"
>       end Start;
>    end My_Task;

You have a deadlock here. The main task, that runs messages loop, 
engages the rendezvous Start with My_Task. During the rendezvous My_Task 
makes a request back which waits for main task timer callback to be 
serviced. That never happens because the main task sits in the rendezvous.

What you can do is to move the request out of the rendezvous letting the 
caller (main) task go:

    task body My_Task is
       Data : My_Record_Access;
    begin
       accept Start (Rec_Acc : My_Record_Access) do
          Data := Rec_Acc; -- Copy the parameter
       end Start; -- Let go
       Cb_Request.Request (Some_Proc'Access, Data); -- Ask back
    end My_Task;

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Win32. Task or CreateThread
  2016-08-05  6:17     ` Dmitry A. Kazakov
@ 2016-08-05  6:48       ` George J
  0 siblings, 0 replies; 12+ messages in thread
From: George J @ 2016-08-05  6:48 UTC (permalink / raw)


пятница, 5 августа 2016 г., 9:18:05 UTC+3 пользователь Dmitry A. Kazakov написал:
> On 2016-08-05 06:25, George J wrote:
> 
> > Hi All! I have a question for Gtk.Main.Routers, that i can't understand.
> > I have next:
> >
> > type My_Record is
> > record
> > .......
> > end record
> >
> > type My_Record_Access is access all My_Record;
> >
> > Test_Record_Access : My_Record_Access;
> >
> > package Cb_Request is new Gtk.Main.Router.Generic_Callback_Request(User_Data => My_Record);
> >
> >    task type My_Task is  -- works well
> >       entry Start;
> >    end My_Task;
> >
> >    task body My_Task is
> >    begin
> >       accept Start;
> >
> >       Cb_Request.Request(Some_Proc'Access,Test_Record_Access); -- all ok
> >
> >    end My_Task;
> >
> > But I need to send parameter to discriminant like this
> > .. in some proc
> > Some_Task.Start(Test_Record_Access)
> >
> > and decl:
> >
> >    task type My_Task is  -- works bad
> >       entry Start(Rec_Acc:My_Record_Access);
> >    end My_Task;
> >
> >    task body My_Task is
> >    begin
> >       accept Start(Rec_Acc:My_Record_Access) do
> >          Cb_Request.Request(Some_Proc'Access,Rec_Acc); -- "freezed"
> >       end Start;
> >    end My_Task;
> 
> You have a deadlock here. The main task, that runs messages loop, 
> engages the rendezvous Start with My_Task. During the rendezvous My_Task 
> makes a request back which waits for main task timer callback to be 
> serviced. That never happens because the main task sits in the rendezvous.
> 
> What you can do is to move the request out of the rendezvous letting the 
> caller (main) task go:
> 
>     task body My_Task is
>        Data : My_Record_Access;
>     begin
>        accept Start (Rec_Acc : My_Record_Access) do
>           Data := Rec_Acc; -- Copy the parameter
>        end Start; -- Let go
>        Cb_Request.Request (Some_Proc'Access, Data); -- Ask back
>     end My_Task;
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

Yeah!!It Works! I'll deal with the rendezvous mechanism. Thanks a lot Dmitry!


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-08-05  6:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-02 14:38 Win32. Task or CreateThread George J
2016-08-02 15:22 ` Dmitry A. Kazakov
2016-08-02 16:39   ` George J
2016-08-03 17:31   ` George J
2016-08-03 19:43     ` Dmitry A. Kazakov
2016-08-04  2:42       ` George J
2016-08-05  4:25   ` George J
2016-08-05  6:15     ` George J
2016-08-05  6:17     ` Dmitry A. Kazakov
2016-08-05  6:48       ` George J
2016-08-03 20:31 ` Aurele
2016-08-04  2:41   ` George J

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox