Al,
I ran your program and it is working as expected. When you call SuspendTimerCallbacks and ResumeTimerCallbacks, those functions affect all the timers in the entire thread. Its effect persists for the lifetime of a thread. And as you can see when you look at the thread ids, the same thread "survives" from one function to the next. That's why thread pools are used: so that they can cache system threads, thus improving performance.
In your test program, you asked: "I thought when you load a new panel it should be the default settings." When you load a panel, all the settings of the panel and its controls are indeed set to their default state. The problem here is that the suspend/resume state of the timers is not a panel or a control setting -- it is a thread setting, and therefore will last for the lifetime of that thread.
If you want to suspend and resume timers on a per-timer basis, you can use the ATTR_ENABLED timer attribute instead. This will certainly be reset for each new timer that is loaded/created. Another benefit of doing this is that in order to suspend/resume you don't have to post an event to each timer's thread. You can set this attribute, for any timer, from the main thread.
Alternatively, calling ResumeTimerCallbacks at the start of each thread function is also an acceptable solution.
Luis
NI