If you did want it to work then you would need to pass

timeActivities, && ( (curRow == numRows-1) || (curRow % timerInterval) == 0)

as the second parameter to the constructor.
You may also find the modulus operation also takes quite a lot of time.  You would need to restrict yourself to powers of two and use shifting.
I'm not sure that it is also a viable solution in general since you may lose the timings for the rows that actually take the time.

If you're going to take a sampling approach I think you would need to change the activityTimer object so it indicated which was the active activity, and have another thread at a regular frequency incrementing the sample counts for the active activity.  Otherwise you may not pick up any information about which activities take a while to process a row if the time is non uniform.  I suspect the context switching overhead is likely outweigh the benefit of reduced calls to get_cycles_now(), unless the sample period was relatively long.