作成したスレッドからenif_sendを呼び出そうとしました。 主に、私はnifから放出された受信メッセージを聞くerlangプロセスを持っています。作成されたスレッドの問題のEnif_send関数
まず、私のenif機能で、その後、私は次のようにメッセージを送信するenif_sendを呼び出して、私は私のErlangのプロセスのpidを持って、私はそれをキャスト:
ErlNifPid* pid = (ErlNifPid*) enif_alloc(sizeof(ErlNifPid));
ErlNifPid * erlang_pid = (ErlNifPid*)argv;
ERL_NIF_TERM pid1 = enif_make_pid(env , erlang_pid);
if(enif_is_pid(env,pid1))
printf(" it's pid\n");
else
printf(" it's not pid\n");
msg_env = enif_alloc_env();
ERL_NIF_TERM replay = (ERL_NIF_TERM) *text;
msg = enif_make_tuple(msg_env, replay);
if(enif_send(NULL, erlang_pid, msg_env,msg))
printf(" send succeed\n");
else
printf(" send failed\n");
まで、私は送ることができています。この段階私のerlangプロセスへのメッセージ。私はenif_threadを生み出し、私はパラメータとしてenvおよびPIDに渡さその後
、私は次のように私のスレッドからenif_send呼び出そうとしました:
ERL_NIF_TERM pid1 = enif_make_pid(conn->env , conn->pid);
if(enif_is_pid(conn->env,pid1))
printf("it's pid\n");
else
printf(" it's not pid\n");
for (int i=0;i<index;i++)
{
msg_env = enif_alloc_env();
msg = enif_make_int(msg_env, 1);
if(enif_send(conn->env, conn->pid, msg_env,msg))
printf(" send succeed\n");
else
printf(" send failed\n");
しかし、私はenif_is_pidでPIDを確認したときに私が得ました無効なpidであっても、そのスレッドで生成されたpidと同じpidがチェックされているため、送信に失敗しました。 何かお考えですか?