[PB4] Timed MessageRequester
Posted: Fri Jun 30, 2006 9:19 pm
Yeah, so, a topic in Coding Questions inspired me to write this: a MessageRequester with a timeout (in milliseconds). If it does time out, it returns 0. I managed to work it into a single procedure (using an unusual thread approach) but you still need to declare a few global variables. I don't think there's a way around that. Oh well.
Code: Select all
; Timed Message Requester by kenmo
; Required declarations
Global TMR_Title.s, TMR_Text.s, TMR_Flags.l, MRP_Return.l
; The procedure
Procedure.l TimedMessageRequester(Title.s, Text.s, Timeout.l, Flags.l = #Null)
Protected Thread.l, StartTime.l, Confirmed.l
TMR_Title = Title : TMR_Text = Text
TMR_Flags = Flags : MRP_Return = #Null
Thread = CreateThread(?MessageRequesterProc, 0)
If Thread
Confirmed = #False : Time = ElapsedMilliseconds()
Repeat
If IsThread(Thread) = #False
Confirmed = #True : Break
EndIf
Until ElapsedMilliseconds() - Time > Timeout
If Confirmed
ProcedureReturn MRP_Return
Else
KillThread(Thread) : ProcedureReturn #Null
EndIf
Else
ProcedureReturn #Null
EndIf
MessageRequesterProc:
MRP_Return = MessageRequester(TMR_Title, TMR_Text, TMR_Flags)
Return
EndProcedure
; Example
Select TimedMessageRequester("Confirm", "Is this procedure quite nifty?", 5000, #PB_MessageRequester_YesNo|#MB_ICONQUESTION)
Case #PB_MessageRequester_Yes
Debug "Yes, it is!"
Case #PB_MessageRequester_No
Debug "No, it ain't!"
Case #Null
Debug "... You didn't answer in 5 seconds."
Default
Debug "You should never encounter this!"
EndSelect