The generalized windows scheduling problem for $n$ jobs on multiple machines is defined as follows: Given is a sequence, $I=\ang{(w_1,\ell_1),(w_2,\ell_2),\ldots,(w_n,\ell_n)}$ of $n$ pairs of positive integers that are associated with the jobs $1,2,\ldots,n$, respectively. The processing length of job $i$ is $\ell_i$ slots (a slot is the processing time of one length unit). The goal is to repeatedly and non-preemptively schedule all the jobs on the fewest possible parallel machines such that the gap (window) between two consecutive executions of the first slot of job $i$ is at most $w_i$ slots. This problem arises in push broadcast systems in which data is transmitted on parallel channels. The problem is NP-hard even for unit-length jobs and a $(1+\varepsilon)$-approximation algorithm is known for this case by approximating the natural lower bound $W(I)=\sum_{i=1}^n (1/w_i)$. The techniques used for approximating unit-length jobs cannot be applied for arbitrary-length jobs mainly because the optimal number of machines might be arbitrarily larger than the generalized lower bound $W(I)=\sum_{i=1}^n(\ell_i/w_i)$. Our main result is an $8$-approximation algorithm for the generalized windows scheduling problem using new methods, different from those used for the unit-length case. We also present an algorithm that uses $2(1+\eps)W(I)+\log w_{max}$ machines and a greedy algorithm that is based on a new tree representation of schedules. The greedy algorithm is optimal for some special and simulations show that it performs very well in practice.