у меня есть этот переключатель, мне нужно выполнять case каждые x секунд, используя gettickcount () в C ++. Заранее спасибо, простите за мой спанглиш: D
int x = rand() % 4;
switch(x)
{
case 0:
GCChatTargetSend(lpObj,lpObj->Index,"String message 1 Here");
break;
case 1:
GCChatTargetSend(lpObj,lpObj->Index,"String message 2 Here");
break;
case 2:
GCChatTargetSend(lpObj,lpObj->Index,"String message 3 Here");
break;
case 3:
GCChatTargetSend(lpObj,lpObj->Index,"String message 4 Here");
break;
}
Вот некоторый код для того, как вы устанавливаете GetTickCount( )
как интервальный таймер:
Сначала ты получаешь время,
StartTime = GetTickCount( )
Затем вы добавляете еще один таймер
EndTime = GetTickCount( )
и вычесть EndTime из StartTime
DeltaTime = EndTime - StartTime
А потом сравниваешь DeltaTime
с EveryMillisecondTask
, Если результат true
вы генерируете случайное число, соответствующее числам в заданном вами операторе switch, которое, в свою очередь, вызовет GCChatTargetSend( )
,
if ( DeltaTime >= EveryMillisecondTask ){
int x = rand() % 4;
switch(x){
// do stuff
}
}
Вот полный список кодов для GetTickCount( )
:
#include <time.h>
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
void GCChatTargetSend( string message );
int main() {
int EveryMillisecondTask=1000; // 1 second = 1000 milliseconds
int StartTime = GetTickCount();
srand (time(NULL));
cout<<"Welcome to GetTickCount() interval timer \n \n";
cout<<"Interval set to "<< EveryMillisecondTask <<" milliseconds \n";while( true ){
int EndTime = GetTickCount();
int DeltaTime = EndTime - StartTime;
// test to see if EveryMillisecondTask matches time
if ( DeltaTime >= EveryMillisecondTask ){
// generate random number
int x = rand() % 4;
cout<<"\nRandom X= "<< x+1 <<"\n";
// switch x
switch(x){
case 0:
GCChatTargetSend("String message 1 Here ");
break;
case 1:
GCChatTargetSend("String message 2 Here ");
break;
case 2:
GCChatTargetSend("String message 3 Here ");
break;
case 3:
GCChatTargetSend("String message 4 Here ");
break;
default:
break;
}
// reset time
StartTime = GetTickCount();
EndTime = GetTickCount();
}
}//while
return 0;
}
void GCChatTargetSend( string message ){
cout<<message<<" \n";
}
Вот как сделать интервал таймера с помощью Windows собственного settimer( )
функция.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspx
Пример кода для settimer( )
:
#define STRICT 1
#include <windows.h>
#include <iostream.h>
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime);
int main(int argc, char *argv[], char *envp[]){
int Counter=0;
MSG Msg;
int timeInMilliseconds = 2000;
cout<<"Welcome to SetTimer( ) interval timer \n \n";
cout<<"Interval set to "<< timeInMilliseconds <<" milliseconds \n\n\n";
UINT TimerId = SetTimer(NULL, 0, timeInMilliseconds, &TimerProc); //2000 milliseconds
cout << "TimerId: " << TimerId << '\n';
if (!TimerId) return 16;
while (GetMessage(&Msg, NULL, 0, 0)){
++Counter;
if (Msg.message == WM_TIMER) cout << "Counter: " << Counter << "; timer message\n";
else
cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
DispatchMessage(&Msg);
}
KillTimer(NULL, TimerId);
return 0;
}
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime){
cout << "CALLBACK " << dwTime << " \n\n";
cout.flush();
}
Других решений пока нет …