Finding threshold crossings without smoothing rarely gives well-defined values. Play with the following:
data(sunspots)
sunspots = as.numeric(sunspots)
smoothover = 21 # Try smaller values here to see the failure
y = filter(sunspots,rep(1/smoothover,smoothover),circular=TRUE)
plot(y)
thresh =30
abline(h=thresh)
cross = which(diff(sign(y-thresh))!=0)-1
rug(cross)
If you want to get "exact" threshold crossings (what is exact if smoothing is so important?) you should use the above approximation first to get a region around the crossing and do a quadratic or linear interpolation afterwards, e.g. with 5 points.