How to control threads execution

I have got several thread(osThreadId_t) and several queues
At begining switching between threads Ive done by xQueueReceive and sendtoback, but now with code increasing its unworking. Switching by Suspend and resume i dont want to do cause I think its not good decision.
Can anybody explain the common way in thread’s switchg, please

Normally Tasks will block as they block on a Queue or Semaphore that they are waiting on for data.

When you say ‘it’s unworking’, what do you mean? Does one task just continually run because it always has data available in its Queue? Maybe you have too much work to do for you processor, or have priorities wrong and are spending time on ‘low prioity’ work when you should be handling something more important.

Yes you right
Thank you for your replay
But im not sure what it cause data available in its queue.
I do receive after sendtoback

well, showing some code would really help, you know?..

As @RAc mentioned, showing code snippets of your tasks and code for creating them will be helpful.