2 つのタスクを実行する C dll を作成しました。
1) 特定のメッセージを C# プログラムに中継する
2) 別のスレッドで集中的なタスクを実行する
すべて機能しますが、C が別のスレッドで集中的なタスクを実行しているにもかかわらず、C# UI が応答しません。
また、負荷の高いタスクを開始する C 関数を C# に公開し、C# がその関数を別のスレッドで実行できるようにしました。
何があっても、集中的なタスクが実行されると、C# が動かなくなり、C# プログラムが応答しなくなります。
プログラム全体を C で作成し、問題なく動作することを忘れていましたが、将来の .NET プロジェクトでこれを使用するために C# ライブラリを作成したいと考えています。
[DllImport(@"C:\projects\math\randomout\Debug\randout.dll", CharSet = CharSet.Auto, EntryPoint = "task_ToggleTask")]
internal static extern bool task_ToggleTask();
__declspec( dllexport ) BOOL task_ToggleTask()
{
if ( _threadStopped )
{
_threadStopped = FALSE;
_t_TaskHandle = ( HANDLE )_beginthread( task_Calculate, 0, NULL );
return TRUE;
}
else
{
_threadStopped = TRUE;
CloseHandle( _t_TaskHandle );
return FALSE;
}
}
static void task_Calculate( void* params )
{
while ( !_threadStopped )
{
WORD nextRestInterval = rand_GetBetween( 15, 50 );
/*
trivial math calculations here...
*/
//next update is at a random interval > 0ms
Sleep( nextRestInterval );
}
_endthread();
}