関数リファレンス
   

関数

mysql_list_processes()
サーバスレッドのリストを返す
   

書式

MYSQL_RES *mysql_list_processes(mysql)

MYSQL *mysql MYSQL構造体

戻り値

成功時 MYSQL_RES 結果セット。失敗した場合は NULL。

エラー

CR_COMMANDS_OUT_OF_SYNC 不当な順にコマンドが実行された
CR_SERVER_GONE_ERROR MySQL サーバがいなくなった
CR_SERVER_LOST サーバへの接続がクエリ中に失われた
CR_UNKNOWN_ERROR 未知のエラーが発生した
   

機能

現在のサーバスレッドを示す結果セットを返します。これは mysqladmin processlistSHOW PROCESSLIST クエリで報告されるものと同じ種類の情報です。
mysql_free_result()
で結果セットを解放する必要があります。

サンプルでは
if((res=mysql_list_processes(myData))==NULL){
     MessageBox("プロセス情報が参照できませんでした");
     mysql_free_result(res);
     return;
}
とmysql_list_processes関数を使用してますが、

if(mysql_query(myData,"SHOW PROCESSLIST"))
    return;
if((res=mysql_store_result(myData))==NULL){
    mysql_free_result(res);
    return;
}
でもいいはずです。マニュアルには結果は同じとなっていますが、しかし実際には違います。
mysql_list_processes()の場合、カラムが7以上得ようとすると一般保護が発生します。
対策としてif(row[i] != NULL)をつけてNULL判定をすれば大丈夫です。
しかしマニュアルと違うのはNULL判定をしてもinfoフィールドのデータが得られないのです。(原因は不明)
"SHOW PROCESSLIST"をクエリ発行するとinfoフィールドが参照できます。

ただ、他のセッションが"select"などのクエリを発行している時には
mysql_list_processes関数でもinfoやstateは参照することは出来ます。
   

サンプル

MYSQL_RES *res;
MYSQL_ROW row;
if((res=mysql_list_processes(myData))==NULL){
     MessageBox("プロセス情報が参照できませんでした");
     mysql_free_result(res);
     return;
}
LV_ITEM listitem;
m_listCtrl.DeleteAllItems();
int count = 0;
int iActualItem;
while(row=mysql_fetch_row(res)){ // すべてのレコードが読み込まれるまで
     char Work[256];
     // すべてのレコードを表示する
     listitem.mask = LVIF_TEXT;
     listitem.iItem = count;
     listitem.iSubItem = 0;
     strcpy(Work,row[0]);
     listitem.pszText = Work;  // 表示するデータを格納
     iActualItem = m_listCtrl.InsertItem(&listitem);
     for(int i=1;i<6;i++){        // なぜか7以上は読めない
          if(row[i] != NULL){
              listitem.iItem = iActualItem;
              listitem.iSubItem = i;
              strcpy(Work,row[i]);
              listitem.pszText = Work;
              m_listCtrl.SetItem(&listitem);
          }
     }
}
mysql_free_result(res);    // resの開放

実際に評価してみてこちらのほうがいいです。
MYSQL_RES *res;
MYSQL_ROW row;
if(mysql_query(myData,"SHOW PROCESSLIST"))
    return;
if((res=mysql_store_result(myData))==NULL){
    mysql_free_result(res);
    return;
}


LV_ITEM listitem;
m_listCtrl.DeleteAllItems();
int count = 0;
int iActualItem;
while(row=mysql_fetch_row(res)){ // すべてのレコードが読み込まれるまで
   char Work[256];
// すべてのレコードを表示する
   listitem.mask = LVIF_TEXT;
   listitem.iItem = count;
   listitem.iSubItem = 0;
   strcpy(Work,row[0]);
   listitem.pszText = Work;    // 表示するデータを格納
   iActualItem = m_listCtrl.InsertItem(&listitem);
   for(int i=1;i<8;i++){
      if(row[i] != NULL){
          listitem.iItem = iActualItem;
          listitem.iSubItem = i;
          strcpy(Work,row[i]);
          listitem.pszText = Work;
          m_listCtrl.SetItem(&listitem);
      }
   }
}
mysql_free_result(res);     // resの開放

Japanese MySQL Manualより抜粋