protothread 用法示例
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <string.h>
#include "pt.h"
static struct pt codelock_pt, input_pt;
static const char code[4] = {
'1', '4', '2', '3'};
static char key_pressed_flag;
static char pass_code[4] = {
0};
static char pass_code_index;
struct timer {
int start;
int interval;
};
static struct timer codelock_timer, input_timer;
static int key_pressed()
{
if (key_pressed_flag != 0) {
key_pressed_flag = 0;
return 1;
}
return 0;
}
static int clock_time()
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
static void timer_set(struct timer *t, int interval)
{
t->interval = interval;
t->start = clock_time();
}
static int timer_expired(struct timer *t)
{
return (int)(clock_time() - t->start) >= (int)t->interval;
}
static PT_THREAD(codelock_thread(struct pt *pt))
{
static int keys;
PT_BEGIN(pt);
while(1) {
for (keys=0<