Re: 複数レッドでのDXライブラリの利用(C#) ( No.1 ) |
- 名前:らんまる 日時:2011/07/09 16:21
現象の再現が可能なコードを下記におきます。
最悪の場合、OSを巻き込んで落ちるようなので
注意して実行ください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using DxLibDLL;
namespace test006
{
class Program
{
static void Main(string[] args)
{
LoadCont load = new LoadCont();
Thread thread = new Thread(new ThreadStart(load.Run));
DX.ChangeWindowMode(DX.TRUE);
if (DX.DxLib_Init() == -1)
{
return;
}
if (DX.SetDrawScreen(DX.DX_SCREEN_BACK) == -1) return;
int _counter = 0;
thread.Start();
while (true)
{
_counter++;
if (_counter > 255) _counter = 0;
// スレッドが終了していたら再びスタートする。
if (thread == null ||
((thread.ThreadState &
(System.Threading.ThreadState.Unstarted |
System.Threading.ThreadState.Stopped)) != 0))
{
thread = new Thread(new ThreadStart(load.Run));
thread.Start();
}
// Escキーで終了
int key = DX.GetJoypadInputState(DX.DX_INPUT_KEY_PAD1);
if (key == DX.PAD_INPUT_9)
{
break;
}
// 簡単な描画
DX.DrawBox(0, 0, 640, 480, DX.GetColor(_counter, _counter, _counter), DX.TRUE);
DX.DrawString(0, 0, "Now Loading...", DX.GetColor(255, 255, 255));
if (DX.ScreenFlip() == -1) return;
if (DX.ProcessMessage() == -1) return;
}
}
}
public class LoadCont
{
public void Run()
{
// メモリに読み込んで消すだけ
int temp = DX.LoadGraph("testpatan02.png");
DX.DeleteGraph(temp);
}
}
}
|
Re: 複数レッドでのDXライブラリの利用(C#) ( No.2 ) |
- 名前:いっち 日時:2011/07/09 22:27
ご参考になるか分かりませんが、以下のスレッドに私の個人的な見解と関連のスレッドが記載されています。
> h t t p://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2301
|
Re: 複数レッドでのDXライブラリの利用(C#) ( No.3 ) |
- 名前:らんまる(解決) 日時:2011/07/09 22:35
回答ありがとうございます。
もう少し落ち着いて過去スレよみます。
|
Re: 複数レッドでのDXライブラリの利用(C#) ( No.4 ) |
- 名前:管理人 日時:2011/07/10 20:17
載せて下さったサンプルプログラムを手元で実行してみましたが、特にエラーは発生しませんでした
ただ、本来なら DxLib_Init の前に SetMultiThreadFlag( TRUE ) ; を呼ばないと DirectX が
マルチスレッドを考慮した動作をしない筈ですので、恐らくたまたまエラーが発生しなかったのだと思います
よろしければ DxLib_Init の前に DX.SetMultiThreadFlag( DX.TRUE ) ; という記述を増やしてお試しになってみてください
また、SetMultiThreadFlag( TRUE ) ; を使用すること以外のマルチスレッドを使用する際の注意については
いっちさんが載せて下さったURLの先にあるスレッドに載っていますのでよろしければご覧ください
|
Re: 複数レッドでのDXライブラリの利用(C#) ( No.5 ) |
- 名前:らんまる(解決) 日時:2011/07/18 01:43
管理人様、回答ありがとうございます。
DX.SetMultiThreadFlag( DX.TRUE ) ;を追加することで
私のサンプルでエラーが起きないことを確認しました。
掲示板やDxDll.csを見ているとSetMultiThreadFlagのように
リファレンスにない関数や定数、構造体をいくつか見かけますが
これらは仮実装のものだという認識でよいのでしょうか?
|
Re: 複数レッドでのDXライブラリの利用(C#) ( No.6 ) |
- 名前:いっち 日時:2011/07/18 10:20
下記URLのレス(No.2)にリファレンスに関する管理人さんのコメントがあります。
> ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1141
|