編集:キューが2dの理由は、cmdがNULLに等しいようにCommandのポインタが必要なためです。 NULL ==(void *)。これは私が混乱するところで、なぜ私がここに来たのかです。 :)ポインタの混乱へのポインタ
私がPythonで持っている別の問題を試してみるために、私はCで小さなテストプログラムを実装しています。少しは分かりますが、明らかに私は混乱しています。私は、非同期USB転送で使用される単純なキューを作成しようとしています。待ち行列からポップされたすべてのコマンドが同じであるため、何かが待ち行列で正しくない。代わりにキュー[1024] [0]をキュー[1024] [1]として書き込むと、コマンドは2つの異なるコマンドを交互に実行し、command_thread_mainでプログラムがクラッシュします。どうやら、cmdがNULLでなければならないことに気付かないでしょう。 [1]を上げると、それ以上は効果がありません。何かヒント?
typedef struct Command {
void (*cb) (char *data, int size);
unsigned char *data;
int size;
} Command;
struct Command queue[1024][0];
int queueEnd = 0;
int queueStart = 0;
static void queue_push(void (*cb), unsigned char *data, int size) {
if (queueEnd >= 1024)
return;
queue[queueEnd]->cb = cb;
queue[queueEnd]->data = data;
queue[queueEnd]->size = size;
queueEnd++;
}
struct Command * queue_pop(void) {
if(queueStart > queueEnd)
return NULL;
return queue[queueStart++];
}
static void *command_thread_main(void *arg) {
struct Command *cmd;
while (!do_exit) {
if(locked) continue;
locked = 1;
cmd = queue_pop();
if(cmd != NULL)
cmd->cb(cmd->data, cmd->size);
}
}
なぜアレイは2Dですか?それは間違って見える – Hasturkun