У меня есть вопрос, связанный со следующей ссылкой: Что такое разница между Thread start() и Runnable run()
В этом вопросе я вижу человека, создающего исполняемые объекты, а затем инициализирующего их двумя разными способами. Итак, означает ли это, что вы можете передавать эти runnables другим вещам во время выполнения?
Я хочу передать код уже существующему потоку, который будет выполняться в цикле этого потока. Я огляделся и, насколько я могу судить, вы хотели бы создать выделенный исполняемый класс, например следующий:
public class codetobesent implements Runnable
{
public void run()
{
..morecodehere.
}
...insertcodestuffhere
}
Но как мне передать это потоку, который уже запущен? Скажем, я пытаюсь сделать игру, и у меня есть что-то особенное, что я хочу, чтобы рендерер сделал в своем потоке. Как я могу передать этот исполняемый файл этому потоку и правильно запустить эти данные?
Моя текущая реализация моего потока рендеринга выглядит следующим образом, я взял ее с учебного сайта, и до сих пор она работала довольно хорошо. Но я хочу знать, как передать ему что-то, чтобы я мог запускать больше, чем просто в предустановленном цикле.
class RenderThread extends Thread
{
private SurfaceHolder _curholder;
private UserView curview;
private boolean runrender = false;
public RenderThread (SurfaceHolder holder, UserView thisview)
{ //Constructor function - This gets called when you create a new instance of this object.
curview = thisview;
_curholder = holder;
}
public SurfaceHolder getThreadHolder()
{
return _curholder;
}
public void setRunning(boolean onoff)
{
runrender = onoff;
}
@Override
public void run()
{
Canvas c;
while (runrender)
{
c = null; //first clear the object buffer.
try
{
c = _curholder.lockCanvas(null); //lock the canvas so we can write to it
synchronized (_curholder)
{//we sync the thread with the specified surfaceview via its surfaceholder.
curview.onDraw(c);
}
}
finally
{
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null)
{
_curholder.unlockCanvasAndPost(c);
}
}
}
}
}