Process.st
author claus
Fri, 05 Aug 1994 02:55:07 +0200
changeset 92 0c73b48551ac
parent 88 81dacba7a63a
child 93 e31220cb391f
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Link subclass:#Process
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
    14
         instanceVariableNames:'id prio state startBlock name 
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
    15
                                restartable pushedInterruptActions exitAction'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
         classVariableNames:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
         poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
         category:'Kernel-Processes'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
Process comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1992 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
             All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    24
'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    26
!Process class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    27
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    28
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    29
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    30
 COPYRIGHT (c) 1992 by Claus Gittinger
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    31
              All Rights Reserved
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    32
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    33
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    34
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    36
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    37
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    38
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    39
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    40
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    41
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    42
version
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    43
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    44
$Header: /cvs/stx/stx/libbasic/Process.st,v 1.12 1994-06-02 16:21:26 claus Exp $
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    45
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    46
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    47
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    48
documentation
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    49
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    50
    Instances of Process represent lightweight smalltalk processes 
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    51
    (i.e. threads). These all run in a shared smalltalk/X address space,
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    52
    and can thus access and communicate via any objects. Processes are
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    53
    typically created by sending #fork or #forkAt: to a block.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    54
    Scheduling is done by processor, which is the sole instance of 
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    55
    ProcessorScheduler.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    56
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    57
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
!Process methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
state
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    62
    "return a symbol describing the processes state"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    63
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
    ^ state
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
state:aSymbol
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    68
    "set the state - only to be used from scheduler"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    69
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
    state := aSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
startBlock:aBlock
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
    74
    "set the receivers startup block"
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
    75
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
    startBlock := aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
priority
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
    "return the receivers priority"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
    ^ prio
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
priority:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
    "set my priority"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
    Processor changePriority:aNumber for:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
setPriority:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
    "set priority without telling processor - no public use"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
    prio := aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
id
10
claus
parents: 5
diff changeset
    98
    "return the processes id"
claus
parents: 5
diff changeset
    99
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   100
    ^ id
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   103
name
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   104
    "return the processes name"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   105
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   106
    ^ name
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   107
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   108
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   109
name:aString
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   110
    "set the processes name"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   111
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   112
    name := aString
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   113
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   114
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   115
nameOrId
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   116
    "return a string to identify the process - either name or id"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   117
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   118
    name notNil ifTrue:[^ name].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   119
    ^ id printString
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   120
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   121
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   122
exitAction
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   123
    "return the processes exit action"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   124
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   125
    ^ exitAction
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   126
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   127
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   128
exitAction:aBlock
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   129
    "set the processes exit action"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   130
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   131
    exitAction := aBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
suspendedContext
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   135
    "return the processes suspended context"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   136
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   137
%{  /* NOCONTEXT */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
    extern OBJ __threadContext();
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   139
    OBJ i;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   141
    if (_isSmallInteger(i = _INST(id))) {
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   142
        RETURN (__threadContext(_intVal(i)));
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   143
    }
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   144
%}
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   145
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   146
    ^ nil
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   147
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   148
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   149
usedStackSize
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   150
    "for monitoring only: return the processes current stack size.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   151
     This method is for monitoring purposes only."
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   152
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   153
%{  /* NOCONTEXT */
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   154
    extern int __threadUsedStackSize();
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   155
    OBJ i;
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   156
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   157
    if (_isSmallInteger(i = _INST(id))) {
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   158
        RETURN( _MKSMALLINT(__threadUsedStackSize(_intVal(i))) );
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   159
    }
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   160
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   161
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   162
    ^ nil
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   163
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   164
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   165
totalStackSize
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   166
    "return the processes maximum used so far stack size.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   167
     This method is for monitoring purposes only."
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   168
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   169
%{  /* NOCONTEXT */
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   170
    extern int __threadTotalStackSize();
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   171
    OBJ i;
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   172
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   173
    if (_isSmallInteger(i = _INST(id))) {
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   174
        RETURN( _MKSMALLINT(__threadTotalStackSize(_intVal(i))) );
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   175
    }
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   176
%}
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   177
.
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   178
    ^ nil
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   179
!
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   180
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   181
maximumStackSize
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   182
    "returns the processes stack limit - i.e. it will be 
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   183
     interrupted with a recursionSignal-raise, if it ever
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   184
     needs more stack (in bytes) than this number"
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   185
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   186
%{  /* NOCONTEXT */
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   187
    extern int __threadMaxStackSize();
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   188
    OBJ i;
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   189
69
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   190
    if (_isSmallInteger(i = _INST(id))) {
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   191
        RETURN( _MKSMALLINT(__threadMaxStackSize(_intVal(i))) );
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   192
    }
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   193
%}
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   194
.
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   195
    ^ nil
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   196
!
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   197
 
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   198
setMaximumStackSize:limit
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   199
    "sets the processes stack limit - i.e. it will be
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   200
     interrupted with a recursionSignal-raise, if it ever
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   201
     needs more stack (in bytes) than this number.
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   202
     Returns the old value."
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   203
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   204
%{  /* NOCONTEXT */
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   205
    extern int __threadSetMaxStackSize();
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   206
    OBJ i;
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   207
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   208
    if (_isSmallInteger(i = _INST(id)) 
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   209
     && _isSmallInteger(limit) ) {
4564b6328136 *** empty log message ***
claus
parents: 59
diff changeset
   210
        RETURN ( _MKSMALLINT(__threadSetMaxStackSize(_intVal(i), _intVal(limit))) );
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   211
    }
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   212
%}
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   213
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   214
    ^ nil
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   215
! !
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   216
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   217
!Process methodsFor:'private scheduler access'!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   218
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   219
setId:aNumber
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   220
    "set the processes id"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   221
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   222
    id := aNumber
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
!Process methodsFor:'suspend / resume'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
suspend
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   228
    "suspend the receiver process - will continue to run when a resume is sent"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   229
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
    Processor suspend:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
resume
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   234
    "resume the receiver process"
10
claus
parents: 5
diff changeset
   235
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
    Processor resume:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
terminate
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   240
    "terminate the receiver process"
10
claus
parents: 5
diff changeset
   241
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
    Processor terminate:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   245
!Process methodsFor:'special'!
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   246
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   247
interruptWith:aBlock
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   248
    "interrupt the receiver and make it evaluate aBlock.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   249
     If the receiver is currently suspended, the block will be remembered
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   250
     to be evaluated once the receiver wakes up"
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   251
25
e34a6267c79b *** empty log message ***
claus
parents: 24
diff changeset
   252
    OperatingSystem blockInterrupts.
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   253
    pushedInterruptActions isNil ifTrue:[
25
e34a6267c79b *** empty log message ***
claus
parents: 24
diff changeset
   254
        pushedInterruptActions := OrderedCollection with:aBlock.
e34a6267c79b *** empty log message ***
claus
parents: 24
diff changeset
   255
        Processor scheduleForInterrupt:self
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   256
    ] ifFalse:[
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   257
        pushedInterruptActions addLast:aBlock.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   258
    ].
25
e34a6267c79b *** empty log message ***
claus
parents: 24
diff changeset
   259
    OperatingSystem unblockInterrupts.
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   260
! !
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   261
    
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
!Process methodsFor:'printing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
59
4a86aad06603 *** empty log message ***
claus
parents: 25
diff changeset
   264
printOn:aStream
85
claus
parents: 69
diff changeset
   265
    aStream nextPutAll:state article;
claus
parents: 69
diff changeset
   266
            space;
59
4a86aad06603 *** empty log message ***
claus
parents: 25
diff changeset
   267
            nextPutAll:state;
4a86aad06603 *** empty log message ***
claus
parents: 25
diff changeset
   268
            nextPutAll:' Process (';
4a86aad06603 *** empty log message ***
claus
parents: 25
diff changeset
   269
            nextPutAll:self nameOrId;
4a86aad06603 *** empty log message ***
claus
parents: 25
diff changeset
   270
            nextPutAll:')'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
! !