Aqui está uma resposta conceitual. Para obter uma resposta mais específica, você precisará fornecer detalhes mais específicos.
Para produzir essa funcionalidade, você precisará dar uma olhada em como você pode pegar a entrada do teclado. Esta será uma função pesada da sua linguagem de programação.
Em um aplicativo de baixo nível, eu configuraria temporizadores que assistem a tecla de baixo e chave (ou mouse-up / down) e aplicam temporizadores executados com a entrada. Em seguida, temos a lógica de controle que decide qual entrada foi baseada no botão pressionado, juntamente com os dados do timer.
Em um aplicativo de nível mais alto, você pode ter uma biblioteca de entrada para fazer a maior parte do trabalho para você. Ou você pode ter funções para analisar a entrada que procura coisas como uma série longa do mesmo sinal de entrada observado dentro de alguns limites de tempo que você declara.
Enfim, como eu disse no começo. Para obter uma resposta específica, explique, pelo menos, em que ambiente de programação você está lidando? Por exemplo, isso é dentro de um quadro de contexto Open-GL?