WSActivate (C 関数)

int WSActivate(WSLINK link)

WSTP接続を起動させ,もう一方のプログラムが反応するのを待つ.

詳細

  • WSActivate()が呼び出せるのは,WSOpenArgcArgv()WSOpenString()等のWSOpen関数のいずれか一つの後だけである.
  • すでにWSActivate()が呼び出されていない場合には,リンクからデータを読み出す呼出し,あるいはリンクにデータを書き込む呼出しが自動的にそのリンクをアクティベートする.
  • WSActivate()はエラーがあると0を返し, 関数が成功すると0以外の値を返す.
  • すでにアクティベートされたリンク上のWSActivate()は,何もしない.
  • リンクの反対側がまだ作成されていない場合には,その動作は,リンクが"-linkconnect"を使って作成されたかどうかによって変わってくる.リンクが作成された場合には,WSActivate() はそのリンクが接続されアクティベートされるまで待つ.リンクが接続リンクである場合には,WSActivate() は即時にエラーを返し,そのリンクを閉じる.
  • WSActivate()がブロックする場合には,WSSetYieldFunction()によって設定された降伏関数を呼び出す.
  • アクティブではないリンクで呼出しが行われた場合には,WSReady()を使ってそのリンクの反対側が作成されているかどうかを見極めることができる.
  • WSError()を使うと,WSActivate()が不成功の場合にエラーコードを引き出すことができる.
  • WSActivate()は,WSTPヘッダファイルwstp.hの中で宣言される.

例題

  (1)

#include "wstp.h"

/* create a link and establish the connection */

int main(int argc, char **argv)
{
    WSENV env;
    WSLINK link;
    int error;

    env = WSInitialize((char *)0);
if(env == (WSENV)0)
{ /* unable to initialize the WSTP environment */ }

    /* let WSOpenArgcArgv process the command line */
    link = WSOpenArgcArgv(env, argc, argv, &error);
    if(link == (WSLINK)0 || error != WSEOK)
{ /* unable to create the link */ }

    /* WSActivate will establish the connection */
    if(!WSActivate(link))
{ /* unable to establish communication */ }

    /* ... */

    WSClose(link);
    WSDeinitialize(env);

    return 0;
}