void eventTimer()
{
while(1)//bir değişkenede bağlanabilir
{
int vMinute = getMinute();
int vHour = getHour();
int vDay = getDay();
int foo[5] = {5,15,20,25,30};
for(int i = 0;i<5;i++)
{
	if(foo[i] == vDay)
	{
		if(checkHour(vHour,vMinute) == true)
		{
			//do something
		}
	}
}
Sleep(1000);
}
}

bool checkHour(int vHour,int vMinute)
{
int foo[9] = {3,5,9,12,15,17,20,22,23};
for(int i = 0;i<9;i++){
	if(foo[i] == vHour && vMinute == 0)//isteğe göre değiştirilebilir
		return true;
}
return false;
}


void startTimer()

{
CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)&eventTimer, NULL, NULL, NULL) ;

//bu şekilde olabilir veya birden fazla thread çalışacaksa bir sınıf yazıp threadleri ordan nesne oluşturup bir vectore atayıp kontrolde edebilirsin
//linuxta createthread yerine pthread_create olması gerekiyor kendiniz ayarlarsınız get minute,hour ve day fonksiyonlarını örnek olarak yazdım içlerini doldurursunuz
}
Edit:eventTimer fonksiyonundaki while içine Sleep(1000) koymayı unutmuşum koyulmazsa cpu sömürür