BackgroundJob.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 3505 148aeaa05f75
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2587
e149cfcded61 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2585
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
3493
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
     3
"{ NameSpace: Smalltalk }"
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
     4
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
     5
AbstractBackgroundJob subclass:#BackgroundJob
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
     6
	instanceVariableNames:''
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
2590
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
     9
	category:'System-Support'
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!BackgroundJob class methodsFor:'documentation'!
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
2590
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
    14
documentation
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
    15
"
3493
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    16
    A BackgroundJob for one-shot computation. When started, it performs it job
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    17
    and terminates. User have to explicitly ask job to start again to 
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    18
    perform new computation.
2602
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    19
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    20
    [author:]
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    21
        Jan Vrany <jan.vrany@fit.cvut.cz>
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    22
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    23
    [instance variables:]
3493
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    24
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    25
    [class variables:]
2602
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    26
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    27
    [see also:]
3493
e7c920efe4cc Cleanup: introduced AbstractBackgroundJob, made all other jobs subclass of it.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
    28
        BackgroundJob
2602
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    29
"
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    30
!
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    31
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    32
examples
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    33
"
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    34
    | job text |
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    35
    job :=  BackgroundJob named: 'example job' on:[
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    36
                Delay waitForSeconds: 3.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    37
                Transcript showCR:'One guy said: ', text
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    38
            ].
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    39
    text := 'Hello world'.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    40
    job restart.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    41
    Delay waitForSeconds: 5.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    42
    text := 'Ahoj Svete!!'.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    43
    job restart.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    44
    Delay waitForSeconds: 1.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    45
    text := 'Haya, I''m talking fast, you should not see the czech greeting'.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    46
    job restart.
44d00fea6ee0 Added documentation and examples
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2590
diff changeset
    47
2590
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
    48
"
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
! !
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
3505
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    51
!BackgroundJob methodsFor:'processing'!
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    52
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    53
process
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    54
    "Actually perform the job. This method is called from the background worker thread"               
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    55
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    56
    self process:job
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    57
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    58
    "Created: / 21-02-2015 / 10:14:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    59
!
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    60
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    61
process: aBlock
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    62
    aBlock value
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    63
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    64
    "Created: / 21-02-2015 / 10:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    65
! !
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    66
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    67
!BackgroundJob methodsFor:'start & stop'!
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    68
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    69
restart: aBlock
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    70
    "Restart the job, evaluationg aBlock instead of pre-configured job"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    71
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    72
    running ifTrue:[
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    73
        self stop.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    74
    ].
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    75
    self start: aBlock
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    76
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    77
    "Created: / 21-02-2015 / 10:16:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    78
!
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    79
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    80
start: aBlock
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    81
    "Start the job, evaluating aBlock instead of pre-configured `job`."
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    82
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    83
    self start: aBlock withPriority: priority
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    84
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    85
    "Created: / 21-02-2015 / 10:17:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    86
!
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    87
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    88
start: block withPriority: prio
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    89
    | t |
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    90
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    91
    ((t := thread) isNil or:[t isDead]) ifTrue:[
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    92
        thread := [
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    93
            [
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    94
                running := true.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    95
                self process: block.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    96
            ] ensure: [
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    97
                running := false.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    98
                thread := nil
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
    99
            ]
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   100
        ] newProcess.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   101
        self setupThread: thread priority: prio.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   102
        thread resume.
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   103
    ]
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   104
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   105
    "Created: / 21-02-2015 / 10:18:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   106
! !
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   107
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
!BackgroundJob class methodsFor:'documentation'!
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
2590
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
   110
version
3505
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   111
    ^ '$Header: /cvs/stx/stx/libbasic2/BackgroundJob.st,v 1.15 2015-02-21 22:42:34 vrany Exp $'
2590
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
   112
!
Claus Gittinger <cg@exept.de>
parents: 2588
diff changeset
   113
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
version_CVS
3505
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   115
    ^ '$Header: /cvs/stx/stx/libbasic2/BackgroundJob.st,v 1.15 2015-02-21 22:42:34 vrany Exp $'
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
!
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
version_SVN
3505
148aeaa05f75 Added new API to BackgroundJob: allow to pass down a block to evaluate as background job
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3493
diff changeset
   119
    ^ '$Id: BackgroundJob.st,v 1.15 2015-02-21 22:42:34 vrany Exp $'
2574
0c9345fafac7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
! !
2976
e1da8a03d161 use #creator instead of #signal
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
   121