Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Need a timed pause command?

Status
Not open for further replies.

ibizarich

Technical User
Jan 11, 2002
8
GB
I'm struggling to find a timed pause command. Part of my code shells out to dos, this needs a few seconds to complete before the rest code continues otherwise it errors I can't seem to find a WAIT command that say I can set to wait 3 seconds, does one exist?
 
Not the best way but you can set up a loop.

Either loop on a number till it reaches a certain value or take a snpashot of the time and add what ever time delay you wish to this and loop until this time is reached.

----------------------------
Function TimeDelay()

Dim StartTime As Date
Dim endTime As Date

StartTime = Now()

endTime = DateAdd("S", 10, StartTime)

Do Until Now() > endTime

Loop

End Function
-----------------------------

Hope this helps you

Ian
 
Try this code....

You use the syntax "Execcmd" rather than "shell"

Paste all but the last sub into the top or begining of your module, then replace the Execcmd statement with your shelled statement.


Option Explicit

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal _
hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


Option Compare Database

Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

' Wait for the shelled application to finish:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258

ReturnValue = CloseHandle(proc.hProcess)
End Sub
'-------------------------------------------------------------------------------------------------

'You wont need this sub....just use the Execcmd instead of shell in your code

Sub shelled_process()


ExecCmd &quot;Your shelled proces here&quot;

End Sub
 
Note: this code polls the system to wait until all shelled processes have stopped before runing the next line of code.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top