hidebun の回答履歴

全363件中1~20件表示
  • 非同期のプロセス間通信(パイプ)で全データ受信する

    こんにちは。 非同期のプロセス間通信(パイプ)で詰まっています。 環境はWindowsで処理系はC++(Win32)です。 スレッドを用意して、 hPipe = ::CreateFile( L"\\\\.\\pipe\\pipename", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ) ; で作成し、OVERLAPPED構造体を // ZeroMemory( &so, sizeof( OVERLAPPED )) ; sOverlapped.hEvent = ::CreateEvent( NULL, FALSE, FALSE, NULL ) ; として、 const size_t bufsize = 16 ; BYTE     buffer[ uBufSize ] ; DWORD    dwNumberOfBytesRead ; bRet = ::ReadFile( hPipe, buffer, bufsize, &dwNumberOfBytesRead, &so ) ; で読み込みをしています。ReadFile関数はすぐ戻りbRetはFALSEで返ってくるため、GetLastErrorを調べて、 switch( ::GetLastError()) {   case ERROR_IO_PENDING :     bRet = ::GetOverlappedResult( hPipe, &so, &dwNumberOfBytesRead, FALSE ) ;     break ; } としてWaitForMultipleObjectsでsOverlapped.hEventがシグナル状態になったら取得したデータの処理をしています。 シグナル状態になるならないに関わらず、上記のReadFileとGetOverlappedResultはループでぐるぐる回しています。 上記の状態で短いデータならよかったのですが、上記のReadFileで読み込み最大サイズの16バイトを超えてしまとうと、 残りの部分のみしか取得できませんでした。 0123456789ABCDEFabcdefg というデータを受信しようとしたとき、後半のabcdefgだけしか取得できませんでした。 すべてのデータを正しく取得するにはどのようにしたらよいのでしょうか?

  • 共有メモリでのデータ読み書きについて

    Linuxで共有メモリを複数プロセスで読み書きする場合について質問させて頂きます。 CPUは32ビットで、共有メモリ上の、int(32ビット)の領域を 複数のプロセスで読み書きする場合を想定した場合、 セマフォ等でロックした方が良いのでしょうか? または、CPUが1命令で読み書きすることが可能 (と思っていますが、違っていればご指摘お願い致します)なので、 セマフォ等のロックをかけなくても、問題はないものなのでしょうか? 割りと良くありそうな疑問だと思ったのですが、 ウェブで調べた限りでは該当する質問はありませんでしたので、 質問させて頂きました。 ご回答宜しくお願い致します。

  • opencvプログラミング エラー

    C++ opencv2.3.1 visual studio 2008 の環境でプログラミングをしているのですが、 以下のようなエラーが出て解決出来ずに困っています。 ------------------------------------------------------------------ 【エラーが出る箇所のソースコード】 if ((tmp_img = cvLoadImage(jpg_name, CV_LOAD_IMAGE_COLOR)) == 0){ free(jpg_name); return -1; } 「jpg_name」には、パスを含むjpgファイル名が記述されたtxtファイルを引数とし、 そのtxtファイルから読み込んだjpgファイル名を格納してあります。 ------------------------------------------------------------------ 【エラー内容】 「jpg_name」にパスも含めて正しくjpgファイル名が格納されているのに tmp_imgに画像が読み込まれず、 if文内のfree、return -1 が実行され、 プログラムが終了してしまいます。 デバッガのウォッチ上では、 「tmp_img」は<未定義の値>、 「cvLoadImage(jpg_name, CV_LOAD_IMAGE_COLOR)」は 「エラー:マネージEEは式の構文を理解しません」と表示されています。 ------------------------------------------------------------------ 解決方法をご存知の方がおられましたら よろしくお願い致します。

  • MATLAB プログラムの動作

    Pedro FelzenswzalbさんのDiscriminatively trained deformable part modelsのプログラムでPASCAL VOC 2007のデータセットを用いた学習を行いたいのです。 readmeにはpascal.mを使うと書いてあるのですが、pascal.mを実行すると cls が未定義の数ですと言われます。 Discriminatively trained deformable part models の使い方について詳しい方や使い方の書いてあるサイトを知っている方は教えてください。お願いします。

  • PIC18F2550の外部入力割込みについて

    PIC18F2550で外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが、mainの処理を行うだけで割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18) 以前ほぼ同様の質問を掲載しましたが、解決につながる回答が得られませんでした↓ 長い間解決出来ず困り果てているので、有益な回答をいただけると幸いです。 mainのwhileループではLEDを点滅させ、スイッチを押せばINT2ピンに0Vが入力され、割り込みでLEDを点灯し続けるという主旨で以下のコードを書きこんで動作させました。 #include <p18f2550.h> #include <delays.h> #pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF #pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF #pragma config WDT = OFF, CCP2MX = OFF #pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF #pragma config STVREN = ON, LVP = OFF, XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF #pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF #pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF #pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF #pragma config EBTR3 = OFF, EBTRB = OFF int i; int j; void high_isr(void); // リセットベクタ #pragma code reset_vector=0x1000 extern void _startup(void); void remapped_reset(void) { _asm goto _startup _endasm } #pragma code high_vector = 0x000008 void interrupt_high_vector(void) {_asm GOTO high_isr _endasm} #pragma code #pragma interrupt high_isr void high_isr(void) { //外部入力割り込みの処理はここに記述 for(j=0; j<10; j++) { LATCbits.LATC1 = 1; Delay10KTCYx(255); } INTCON3bits.INT2IF = 0; } void main() { OSCCON = 0b01111100; //システムクロックを8MHZに設定 TRISA = 0b01111111; //ポートAをすべて入力に設定 TRISB = 0b11111111; //ポートBをすべて入力に設定 TRISC = 0b00000000; //ポートCをすべて出力に設定 RCON = 0b10000100; INTCON = 0b10010000; INTCON2 = 0b10000000; INTCON3 = 0b10011000; //INT2ピンの立下りエッジで割り込み処理に移行する     while(1) { LATCbits.LATC1 = 1; Delay10KTCYx(255); LATCbits.LATC1 = 0; Delay10KTCYx(255); } } スイッチ入力時に0VがINT2ピンに入力されていることは確認できたので、プログラムの方に問題があると思われます。 回答お待ちしております。

  • PIC18F2550の割り込み処理について

    PIC18F2550を使って、外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18) とりあえずスイッチを押せばINT2ピンに5Vが入力され、割り込みでLEDを点滅させるという主旨で以下のコードを書きこんで動作させました。 #include <p18f2550.h> #include <delays.h> #include <portb.h> #pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF #pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF #pragma config WDT = OFF, CCP2MX = OFF #pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF #pragma config STVREN = ON, LVP = OFF, XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF #pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF #pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF #pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF #pragma config EBTR3 = OFF, EBTRB = OFF int i; void isr(void); #pragma code isrcode = 0x0000008 void isr_direct(void) {_asm GOTO isr _endasm} #pragma code #pragma interrupt isr void isr(void) { //外部入力割り込みの処理はここに記述 INTCON3bits.INT2IF = 0; for(i=0; i<10; i++) { LATCbits.LATC1 = 1; Delay10KTCYx(255); LATCbits.LATC1 = 0; Delay10KTCYx(255); } } void main() { OSCCON = 0b01110000; //システムクロックを8MHZに設定 TRISA = 0b1111111; //ポートAをすべて入力に設定 TRISB = 0b11111111; //ポートBをすべて TRISC = 0; //ポートCをすべて出力に設定 //ポートRB2の外部割込みON, 立上がりエッジでON, Bポートの抵抗プルアップOFF OpenRB2INT(PORTB_CHANGE_INT_ON & RISING_EDGE_INT & PORTB_PULLUPS_OFF); RCONbits.IPEN = 0; //割り込み優先制御OFF INTCON3bits.INT2IE = 1; INTCONbits.GIE = 1; //全割り込み許可 while(1); } しかし、スイッチを押しても割り込み処理に移行せず無反応のままです。 スイッチを押した時にINT2ピンに5V入力があることはテスターで確認したので、ソースコードの方に問題があるかと思います。 よろしくお願いします。

  • RS232C通信のC言語プログラム:入力モード?

    ある計測機器(以後(A)と略記)と"一般的な"Linux PC(Kernel 2.4xx)とをRS232Cシリアルポートで接続し、コマンドの送信とデータの受信を一定時間間隔(1秒)で行うためのC言語プログラムを作成しようとしています。第一段階として、Windows XPのソフトウェア:ハイバーターミナルで(A)にコマンドパケット(10バイト程度)を送信し、それに対応するデータ(20バイト程度)を(A)の取り扱い説明書どおり、正しく受け取ることができました。(A)の受け付ける通信データフォーマットは”8 data bits, 1 stop bit, no parity bit"で、通信ケーブルはいわゆる3線式で、フロー制御は用いません。通信レートは9600baudです。  (A)から返される20バイト程度(長さはまちまちです)のデータパケットは全て、最後が[;FF]の"アルファベット3文字"で終わっていて、いわゆる”行末コード”は付加されていません(取扱説明書でも確認ずみ)。このような場合に、linux上でのC言語プログラムで(A)が接続された/dev/ttyS* (*は一桁の数字)から、どのような入力モードでread()すればよいか、アドバイスをお願いいたします。事前調査の段階ですが、今考えている方法は (1)ループの中で、ノンブロッキングモードでひと文字ずつ読んで、自分で用意したバッファに納めつつ、その最後が";FF"になったらループを脱出する というものですが、制御用のLinux PCは他にも”作業をしていて”、(A)とのデータの授受の負荷は軽いほどよいので、より賢明な方法がないか探しています。 たとえば、 (2)カノニカルモードで、一時的に、”行末コード”にセミコロン";"を指定して、read()する などということは可能でしょうか。これが可能なら、次の"FF"は、2文字を指定して”読み捨てる”ことも可能になります。 わかりにくい説明で恐縮ですが、他のアイデアなどを含めて、アドバイスをお願いいたします。

  • フェードアウト時にぶちっと画像が一瞬切れます。

    以下のように、アプリ起動時に、フェードインで現れてフェードアウトで消えていくフォームがあります その後に実際に使用するフォームを表示したいと思っています。 ただwindows8だと問題ないのですがXPやwindows7で下記コードを実行するとちょうど Thread.Sleep(4000)という命令以降フェードアウトしていくのですが この時一瞬画像がブチっとコマ落ちしたような現象がおきるのです。 原因がわからず困っております。 どなたか原因がわかるかたいらっしゃいませんでしょうか? お願いします! public class MainClass{ public static void Main(string [] args){ try{ FrontForm frontObj = new FrontForm(); frontObj.StartPosition = FormStartPosition.CenterScreen; frontObj.SetImage("f04.jpg"); frontObj.FormBorderStyle = FormBorderStyle.None; Application .EnableVisualStyles(); Application.Run(frontObj); Application.Run(new Form()); }catch(Exception e){ MessageBox.Show(e.ToString()); } } } public class FrontForm : Form{ //フェードさせるためのタイマーオブジェクト public System.Windows.Forms.Timer TimerObj ; //画面にフェードインアウトで表示させる画像用ラベル public Label labelObj ; //実際に表示させるための画像パス public string imagePath; //フェードインとアウトの境目フラグ public int fadeFlag; //コンストラクタ public FrontForm(){ this.Width = 900; this.Height = 400; this.labelObj = new Label(); this.labelObj.Width = this.ClientSize.Width; this.labelObj.Height = this.ClientSize.Height; this.Controls.Add(this.labelObj); this.Opacity = 0.0F; this.Visible = false; this.fadeFlag = 0; this.Load += new EventHandler(this.RenderFade); } //フェード用画像をセットする public void SetImage (string path){ Bitmap bit = new Bitmap(this.ClientSize.Width,this.ClientSize.Height); Graphics gr = Graphics.FromImage(bit); this.imagePath = path; Image imageObj = Image.FromFile(this.imagePath); gr.DrawImage(imageObj,0,0,this.ClientSize.Width,this.ClientSize.Height); this.labelObj.BackgroundImage =bit; } public void RenderFade(Object sender ,EventArgs e){ //タイマーイベントの作成 this.TimerObj = new System.Windows.Forms.Timer(); this.TimerObj.Tick += new EventHandler(this.RenderMethod); this.TimerObj.Interval = 30; this.TimerObj.Start(); } public void RenderMethod(Object sender ,EventArgs e){ if(this.fadeFlag == 0){ Console.WriteLine(this.Opacity.ToString()); this.Opacity += 0.01F; if(this.Opacity == 1){ this.fadeFlag = 1; Thread.Sleep(4000); } } if(this.fadeFlag == 1){ Console.WriteLine("====" + this.Opacity.ToString() + "===="); this.Opacity = this.Opacity - 0.01F; if(this.Opacity ==0){ this.Close(); } } } }

  • フェードアウト時にぶちっと画像が一瞬切れます。

    以下のように、アプリ起動時に、フェードインで現れてフェードアウトで消えていくフォームがあります その後に実際に使用するフォームを表示したいと思っています。 ただwindows8だと問題ないのですがXPやwindows7で下記コードを実行するとちょうど Thread.Sleep(4000)という命令以降フェードアウトしていくのですが この時一瞬画像がブチっとコマ落ちしたような現象がおきるのです。 原因がわからず困っております。 どなたか原因がわかるかたいらっしゃいませんでしょうか? お願いします! public class MainClass{ public static void Main(string [] args){ try{ FrontForm frontObj = new FrontForm(); frontObj.StartPosition = FormStartPosition.CenterScreen; frontObj.SetImage("f04.jpg"); frontObj.FormBorderStyle = FormBorderStyle.None; Application .EnableVisualStyles(); Application.Run(frontObj); Application.Run(new Form()); }catch(Exception e){ MessageBox.Show(e.ToString()); } } } public class FrontForm : Form{ //フェードさせるためのタイマーオブジェクト public System.Windows.Forms.Timer TimerObj ; //画面にフェードインアウトで表示させる画像用ラベル public Label labelObj ; //実際に表示させるための画像パス public string imagePath; //フェードインとアウトの境目フラグ public int fadeFlag; //コンストラクタ public FrontForm(){ this.Width = 900; this.Height = 400; this.labelObj = new Label(); this.labelObj.Width = this.ClientSize.Width; this.labelObj.Height = this.ClientSize.Height; this.Controls.Add(this.labelObj); this.Opacity = 0.0F; this.Visible = false; this.fadeFlag = 0; this.Load += new EventHandler(this.RenderFade); } //フェード用画像をセットする public void SetImage (string path){ Bitmap bit = new Bitmap(this.ClientSize.Width,this.ClientSize.Height); Graphics gr = Graphics.FromImage(bit); this.imagePath = path; Image imageObj = Image.FromFile(this.imagePath); gr.DrawImage(imageObj,0,0,this.ClientSize.Width,this.ClientSize.Height); this.labelObj.BackgroundImage =bit; } public void RenderFade(Object sender ,EventArgs e){ //タイマーイベントの作成 this.TimerObj = new System.Windows.Forms.Timer(); this.TimerObj.Tick += new EventHandler(this.RenderMethod); this.TimerObj.Interval = 30; this.TimerObj.Start(); } public void RenderMethod(Object sender ,EventArgs e){ if(this.fadeFlag == 0){ Console.WriteLine(this.Opacity.ToString()); this.Opacity += 0.01F; if(this.Opacity == 1){ this.fadeFlag = 1; Thread.Sleep(4000); } } if(this.fadeFlag == 1){ Console.WriteLine("====" + this.Opacity.ToString() + "===="); this.Opacity = this.Opacity - 0.01F; if(this.Opacity ==0){ this.Close(); } } } }

  • C++/CLIでネイティブの構造体を使用したい

    すみません。C++の初心者です。 C++/CLIフォームアプリケーションで関数の呼出し画面を作成しています。 既にある(C++ネイティブで作成済み)のヘッダファイルをプロジェクト上にコピー、追加して ヘッダファイル内に書かれている構造体を使用したいのですが、 出来ないのでしょうか? ヘッダファイル(xxx.h)内には以下のような構造体が作成されています。 typedef struct { double pq_base; int iter_max; double eps; int chi_set_flg; int bad_rmv_flg; int obs_slk_flg; int obs_before_flg; int calc_pf_flg; double *chi_val_95_0; double *chi_val_97_5; double *chi_val_99_0; }s_SE_SET; C++/CLIのプロジェクト内にこのヘッダファイルを追加して フォーム内のあるボタンを押された時に、この構造体を参照させてあげたいのですが、 以下の様に構造体変数を定義して s_SE_SET se_set; ビルドを行うと以下のエラーが出ます。 error C4368: 'se_set' をマネージ 'se_project::Form1' のメンバーとして定義できません。 混合型はサポートされていません C++/CLIではネイティブで定義された構造体は使用出来ないのでしょうか? なにか方法が有るとすればその方法を教えて頂けると嬉しいです。 どなたかご教授頂けませんでしょうか。 よろしくお願い致します。

  • マルチスレッドの動作停止について質問なんですが

    マルチスレッドの動作停止について質問なんですが 現在、C++とDirectXを使用してマルチスレッドプログラムを作成しているのですが、 どういう訳かプログラムそのものが動作停止を起こしてしまいます 状況としては 1、マルチスレッドは初期の読み込み時にのみ使用していて、毎回同じものを同じ順番で読み込んでいる。 2、読み込んでいるものは3Dモデル、2D画像の二つ 3、毎回動作を停止する訳ではなく、3~4回に1回の割合で停止する 4、動作を停止している位置を調べてみると毎回違う箇所で動作を停止している 5、スレッドセーフで作っており、デッドロック等は起こっていない 6、エラーは例外は出ない 以上の状況で、プログラムの停止する可能性のある原因について心当たりがある方がいれば教えていただきたいです

  • TCPでの非同期型select関数について

    マッキントッシュOS-X上で動くTCP通信プログラムを作る場合について教えてください。 ウィンドウアプリを考えています。 ウィンドウ環境なので、アプリがフリーズしてしまわないために、 以下のような非同期処理が考えられます。 この場合、データが来ていなくても、while(1)がぐるぐる回るので 無駄にプロセスを食ってしまうと思うのですが、これはしかたのないことでしょうか。 もっとよい方法がるのでしょうか。 Winsockだとイベント応答関数での受信処理処理ができてエレガントなのですが、 バークレイソケットでは、どうすべきなのか疑問に思い質問させていただきました。 よろしくお願いします。 //ソケットを非同期モードにセット val = 1; ioctl(sock, FIONBIO, &val); while (1) {   memcpy(&fds, &readfds, sizeof(fd_set));   select(2, &fds, NULL, NULL, NULL);   // sockに読み込み可能データが届いている場合は、受信   if (FD_ISSET(sock, &fds)) {     memset(buf, 0, sizeof(buf));     recv(sock, buf, sizeof(buf), 0);   }   else{     //受信データがなかったときの処理   } }

  • TCPでの非同期型select関数について

    マッキントッシュOS-X上で動くTCP通信プログラムを作る場合について教えてください。 ウィンドウアプリを考えています。 ウィンドウ環境なので、アプリがフリーズしてしまわないために、 以下のような非同期処理が考えられます。 この場合、データが来ていなくても、while(1)がぐるぐる回るので 無駄にプロセスを食ってしまうと思うのですが、これはしかたのないことでしょうか。 もっとよい方法がるのでしょうか。 Winsockだとイベント応答関数での受信処理処理ができてエレガントなのですが、 バークレイソケットでは、どうすべきなのか疑問に思い質問させていただきました。 よろしくお願いします。 //ソケットを非同期モードにセット val = 1; ioctl(sock, FIONBIO, &val); while (1) {   memcpy(&fds, &readfds, sizeof(fd_set));   select(2, &fds, NULL, NULL, NULL);   // sockに読み込み可能データが届いている場合は、受信   if (FD_ISSET(sock, &fds)) {     memset(buf, 0, sizeof(buf));     recv(sock, buf, sizeof(buf), 0);   }   else{     //受信データがなかったときの処理   } }

  • for文内の計算時に出るエラーについて

    配列に格納している値を使って計算するプログラムを作成しているのですが、以下のエラーが出てプログラムを実行していくことができません。2次元配列に格納している値をfor文を回して加算するプログラムになっています。プログラム・エラーメッセージと以下に載せていますので、解決策・改善策がお分かりになる方はぜひ教えていただきたいと思います。よろしくお願い致します。 使っているソフトはVisual Studio2010(Visual C++)のWindowsFormアプリケーションです。 プログラム: for(j=1;j<=768;j++){ for(i=1;i<=10;i++){ a[i][j].num+=b[i][j].num } } エラー内容: ランタイムの重大なエラーが発生しました。エラーのアドレスは 0x690c169f、スレッド 0x19e4 です。エラー コードは 0xc0000005 です。これは CLR のバグであるか、またはユーザー コードのアンセーフまたは確認不可能な部分にバグがある可能性があります。このバグの一般的な原因には、スタックが壊れる可能性のある COM-interop または PInvoke のユーザー マーシャリング エラーが含まれています。

  • Win2Kで動く最新のEclipse c++

    Windows2000マシン上で動作するEclipse c++の最新版(最終版?)はどのバージョンでしょうか? 本家のHPもMergeDocProjectも探し、相当ググってもWikiでも分かりませんでした。 最新のもの(4.2 Juno)ではインストールできず、Pleiades上最古の3.3 Europaだとc++は 含まれていませんでした。 よろしくお願いします。

    • ベストアンサー
    • noname#243024
    • C・C++・C#
    • 回答数1
  • Wingdi.h Windows.h を開くには?

    SetTextAlignのAPIを多用しています このAPIの既定値として事前に定義してあるのが、Wingdi.h Windows.hであるとMSDNに記載されています そこでこの二つのファイルを開こうと思いましたが、何処にあるのか分かりません コントロールパネル⇒フォルダオプション⇒隠しファイルも表示 にしておいて 画面左下のWindowsマークをクリック、プログラムとファイルの検索欄に Windgi.h または Windows.h と入れて検索してもそれらしい項目は表示されません 私の操作方法の誤りを教えて頂ければ幸いです 宜しくお願い申し上げます

  • 動作させると同じロジッックを何べんもまわります。

    C++、Qt、Linuxの環境で開発をしています。 何か動作をさせると1回、2回と同じロジックを意味なくまわり、だんだん重くなってきます。 メモリーを開放していないのかとも考えたんですが、メモリー確保は配列(例えばa[10])と確保しているので、プログラマーが能動的にメモリーを開放する必要は、無いですよね。 で、私は意味もなく、なんべんもまわるプログラムの動きに注目したのですが、なぜ何べんも回るのか。なぜ回る回数がだんだん増えていくのかがわかりません。 わかる方がぜひご教授をお願いします。

  • ファイルをDrag&Dropされている最中を知る

    こんにちは。 Win32でプログラムをしています。 DragAcceptFilesでTRUEを指定することでファイルがドラッグアンドドロップされたことを知ることができますが、ドラッグアンドドロップされようとしている最中を知ることはできないのでしょうか? エクスプローラからファイルをドラッグアンドドロップしようとして、マウスの左ボタンを放すまでのマウスの操作を知りたいのですが、WM_MOUSEMOVEは届いていないようです。 何か方法はないものでしょうか。

  • Visual C++からMATLABを呼び出したい

    工学系の大学生の者です. 現在,Visual C++で作成したMFCアプリを使って実験機を制御し,その結果にあたるセンサの値を取得してcsvファイルを生成し,それをMATLAB(csvファイルをグラフ化するmファイルを呼び出し)でグラフ化しています. ただ,この手法だとアプリの実行でcsvファイルを生成したのち,MATLAB上でコマンドを打つ必要があり,少し手間がかかります. 私の理想としては,センサ測定値をcsvファイルに書き出したのち,自動でMATLABグラフ化したいと思っております. C#だとMATLABと連携がしやすいとか聞くのですが,VIsua C++ではMATLAB連携や上記のような自動化はできないのでしょうか? できる場合は,やり方や参考資料などを挙げていただけると幸いです. (たとえば,ライブラリやヘッダー,C++ソース側の記述など) ご回答,よろしくお願い致します.

  • マウスを動かさないとパラパラ漫画が表示されない

    Visual studio 2008 C#で作成しているプログラムの挙動がおかしくなる理由がわからないので、質問させて頂きます。 01、02、03と順に番号を振ってあるフォルダを読み込み、フォルダ内の画像をパラパラ漫画のように続けて表示させる、読み込みと再生を同時に行えるようにスレッドを使用したプログラムを作成しています。 「再生」ボタン押下→フォルダ01内の画像を連続表示→フォルダ02内の画像を連続表示→「次へ」ボタン押下→「再生」ボタン押下→フォルダ03内の画像を連続表示→フォルダ04内の画像を連続表示→「次へ」ボタン押下→「再生」ボタン押下… という風に全ての画像をpicturebox1に表示させていきたいのですが、再生ボタンを押してもpicturebox内に表示されず、何故かマウスを動かすと表示が始まります。 また、パラパラ漫画がガクガクとして滑らかに動かない時も同様に、マウスを動かすとなめらかに表示されます。 ガクガクとして滑らかに動かない時に、マウスを動かさないと、 >> //二回目スライドショーのスレッドを開始 >> thread_show = new Thread(new ThreadStart(threadShow)); の部分で InvalidOperationExeception がハンドルされる事があります。 自分でも調べてみたのですが、マウスを動かすとするすると動く理由が分かりません。読み込みと再生スレッドのタイマがうまく咬み合っていないのかと予想しているのですが…。 アドバイス頂けると嬉しいです。     //開始 private void プログラム開始ToolStripMenuItem_Click(object sender, EventArgs e) { //画像読み込みスレッドを開始 present = 0;//present:現在参照している動画像 directory = directories[show_order[present]];//show_order[]:フォルダの再生順序 thread_read = new Thread(new ThreadStart(read_image));//画像読み込みのスレッドthread_read宣言 thread_read.Start(); //再生ボタンを有効に thread_read.Join(); button2.Enabled = true; } //「再生」ボタンを押したとき private void button2_Click(object sender, EventArgs e) { Thread.Sleep(500); //一回目スライドショーのスレッドを開始 thread_show = new Thread(new ThreadStart(threadShow)); thread_show.Start(); //二回目画像読込の設定 if (present <= douga_num - 1) { directory = directories[show_order[present + 1]]; thread_read_one = new Thread(new ThreadStart(read_one_image)); thread_read_one.Start(); } thread_read_one.Join(); //二回目スライドショーのスレッドを開始 thread_show = new Thread(new ThreadStart(threadShow)); thread_show.Start(); thread_show.Join(); button3.Enabled = true;//「次へ」ボタンの表示 } //「次へ」ボタンを押したとき private void button3_Click(object sender, EventArgs e) { //回答フォームの表示 Form3 form = new Form3(this); form.ShowDialog(); if (form.DialogResult != DialogResult.OK) { return; } button3.Enabled = false; if (present < douga_num - 2 )//全動画像-2よりも参照動画番号が小さかったら { directory = directories[show_order[present+2]]; thread_read_one = new Thread(new ThreadStart(read_one_image)); thread_read_one.Start(); thread_read_one.Join(); } //再生ボタンを有効に if (present < douga_num) { button2.Enabled = true;//再生ボタンを有効に } present = present + 2;//参照している動画番号を2増やす //実験終了 if (present >= douga_num) { //再生ボタンを無効に button2.Enabled = false; } } //画像表示のスレッド private void threadShow() { Stopwatch sw = new Stopwatch(); //リストに入っているファイルの数をfile_numbersに入れる file_numbers = img.Count; pictureBox1.Image = img[0]; //フレーム番号のリセット now_show = 1; //時間計測:開始 sw.Start(); while (now_show < file_numbers) { if (33 <= sw.ElapsedMilliseconds) { //前フレームを消去 img[0].Dispose(); img.RemoveAt(0); //画像を表示 pictureBox1.Image = img[0]; //カウントを進める now_show++; //時間計測再スタート sw.Reset(); sw.Start(); }