А вот и полное решение Вашего вопроса - даже самому понравилось

))
Кнопка "Cycle" запускает Ваш бесконечный цикл. Кнопка "Cancel" - останавливает выполнение цикла.
PROGRAM
OMIT('***')
* Created with Clarion 8.0
* User: dsabitov
* Date: 02.09.2011
* Time: 18:56
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
***
MAP
CycleProc PROCEDURE
END
INCLUDE('KEYCODES.CLW')
Counter ULONG(0)
StopExecution BYTE(0)
Window WINDOW('Caption'),AT(,,202,68),GRAY,SYSTEM,FONT('MS Sans Serif',8)
BUTTON('&Cycle'),AT(61,44,41,14),USE(?OkButton),DEFAULT
BUTTON('&Cancel'),AT(103,44,42,14),USE(?CancelButton)
STRING(''),AT(9,11,184,22),USE(?Counter),CENTER,FONT('Lucida Sans Unicod' & |
'e',20,,FONT:bold)
END
SavedThread LONG
MainThread LONG
EVENT:DisplayCounter EQUATE(401h)
CODE
OPEN(WINDOW)
ACCEPT
CASE FIELD()
OF ?OkButton
IF EVENT() = EVENT:Accepted THEN
DISABLE(?OkButton)
StopExecution = 0
MainThread = THREAD()
SavedThread = START(CycleProc,35000)
CYCLE
END
OF ?CancelButton
IF EVENT() = EVENT:Accepted THEN
StopExecution = 1
?Counter{PROP:Text} = Counter
ENABLE(?OkButton)
DISPLAY
CYCLE
END
END
IF EVENT() = EVENT:DisplayCounter THEN
?Counter{PROP:Text} = Counter
DISPLAY(?Counter)
END
END
CycleProc PROCEDURE
CODE
LOOP
Counter += 1
IF INT(Counter/10000)*10000 = Counter THEN
POST(EVENT:DisplayCounter,,MainThread)
END
IF StopExecution = 1 THEN BREAK.
END