我写了执行两个任务的C DLL:多线程:C#程序运行C DLL - 不响应C#
1)继电器某些信息到C#程序
2)在不同的线程执行密集的任务
尽管C在不同的线程上运行密集型任务,但它仍然可以正常工作,但C#UI无响应。
我也暴露了C函数,它将C11的密集任务踢开,允许C#尝试在另一个线程上运行该函数。
无论如何,当密集任务运行时,C#陷入了僵局,C#程序变得无法响应。
我忘了提及我已经用C编写了整个程序,它工作时没有问题,但我想编写一个C#库在未来的.NET项目中使用它。
[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();
}
由于没有反应,你的意思是呆滞或根本没有反应? –
请向我们展示调用该任务的代码。 –
我不认为有任何代码涉及,是吗? –