Как вызвать case в switch каждый x интервал времени, используя gettickcount () Stack Overflow

у меня есть этот переключатель, мне нужно выполнять 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;
}

0

Решение

введите описание изображения здесь

Вот некоторый код для того, как вы устанавливаете 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();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]