Drupal supports two types of cron jobs:
Poormanscron
This is the default Drupal 7 cron, where at the end of a page request after a certain amount of time, hook_cron is called. This is controlled by the Run cron every ...
setting at admin/config/system/cron
.
This means that if cron is configured to run every 3 hours, the first user to visit the page after 3 hours will trigger cron. This also means on a low-traffic site that it can many more hours before cron is actually called.
Scheduled cron
This is a much more reliable method which does not involve the user. The principle is that the cron page is called from an external source (usually crontab on the server) at a set interval. As long as the server is up, it will run guaranteed every 3 hours.
In order to enable this, make sure to disable Poormanscron at admin/config/system/cron
(set it to run never). And create a cron job (General and Linux manual).
In case of a Windows environemt, one can use Windows' built in scheduled tasks. Please refer to this manual page.
UPDATE
Be aware that the manual is a little outdated, since Drupal 7 the cron script is protected by a token (to prevent DDoS). So where you see to call http://www.example.com/cron.php
, add your site specific token. This can be found on your site's status page and looks like this: http://www.example.com/cron.php?cron_key=xxxxxxxxxx
.