by 7 » 2008年4月22日(火) 18:54
> Timerを使用してもCPU使用率が上がらなくきちんと定期的にカウントアップしてくれる方法をどなたか教えてください。
SetTimer()関数を使ってもCPU使用率が上がらない方法は分かりませんが、SetTimer()関数を使わないで済ませる方法を考えました。
コマンドボタン1を押すとスタート、もう一回押すとエンドです。
コード自体問題ありそうですし、ソフトウェアを終了する時もスレッドがどうなってるかとか把握しなきゃですし、初心者の方には向かないんですけどね...。
※終了時、スレッドがどうなってるか調べる部分は書いておりませんです
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
TypeDef THREADPROC = *Function(ByVal lpParameter As VoidPtr) As DWord
Dim hThread As HANDLE
Dim bThread As BOOL
Function TimerThread(ByVal lpParameter As VoidPtr) As DWord
Dim i=0 As Long
While bThread
i++
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Str$(i))
Sleep(10)
Wend
CloseHandle(hThread)
hThread=NULL
End Function
Sub MainWnd_CommandButton1_Click()
Dim dwThreadID As DWord
If bThread Then
SetDlgItemText(hMainWnd,CommandButton1,"スタート")
Else
hThread=CreateThread(
ByVal NULL,0,
AddressOf(TimerThread) As THREADPROC,
NULL,0,VarPtr(dwThreadID))
SetDlgItemText(hMainWnd,CommandButton1,"エンド")
End If
bThread Xor= TRUE
End Sub
> Timerを使用してもCPU使用率が上がらなくきちんと定期的にカウントアップしてくれる方法をどなたか教えてください。
SetTimer()関数を使ってもCPU使用率が上がらない方法は分かりませんが、SetTimer()関数を使わないで済ませる方法を考えました。
コマンドボタン1を押すとスタート、もう一回押すとエンドです。
コード自体問題ありそうですし、ソフトウェアを終了する時もスレッドがどうなってるかとか把握しなきゃですし、初心者の方には向かないんですけどね...。
※終了時、スレッドがどうなってるか調べる部分は書いておりませんです
[hide][code]TypeDef THREADPROC = *Function(ByVal lpParameter As VoidPtr) As DWord
Dim hThread As HANDLE
Dim bThread As BOOL
Function TimerThread(ByVal lpParameter As VoidPtr) As DWord
Dim i=0 As Long
While bThread
i++
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Str$(i))
Sleep(10)
Wend
CloseHandle(hThread)
hThread=NULL
End Function
Sub MainWnd_CommandButton1_Click()
Dim dwThreadID As DWord
If bThread Then
SetDlgItemText(hMainWnd,CommandButton1,"スタート")
Else
hThread=CreateThread(
ByVal NULL,0,
AddressOf(TimerThread) As THREADPROC,
NULL,0,VarPtr(dwThreadID))
SetDlgItemText(hMainWnd,CommandButton1,"エンド")
End If
bThread Xor= TRUE
End Sub[/code][/hide]