我们被告知Google Chrome会在单独的流程中运行每个标签.因此,一个选项卡中的崩溃不会导致其他选项卡出现问题.
AFAIK,多进程主要用于没有GUI的程序.我从来没有读过任何可以将多个GUI流程嵌入到单个GUI流程中的技术.
Chrome是如何做到的?
我问这个问题是因为我正在设计CCTV软件,它将使用来自多个相机制造商的视频解码SDK,其中一些远非稳定.所以我更喜欢在不同的流程中运行这些SDK,我认为这与Chrome类似.
我有一个线程,并尝试建立连接.在线程中,我打电话给第三方库.有时,此调用会挂起,并且永远不会返回.在UI线程上,我希望能够通过中止线程来取消连接尝试,该线程应该中止对第三方库的挂起调用.
我已经调用了Thread.Abort,但现在已经读过Thread.Abort仅在控件返回托管代码时才有效.我观察到这是真的,因为线程永远不会中止,我现在已经坐在Thread.Join上十分钟了.我该怎么办这个挂线程?我应该将引用置空并继续吗?我想尽可能干净 -
大家好,
我有一个包含错误的第三方库.当我调用一个函数时,它可能会挂起.库函数在dll中调用.我决定将调用移到线程中等待一段时间.如果线程已完成,则确定.如果没有 - 我应该终止它是强制性的.
这里简化的例子:
unsigned Counter = 0;
void f()
{
HANDLE hThread;
unsigned threadID;
// Create the second thread.
hThread = (HANDLE)_beginthreadex( NULL, 0, DoSomething, NULL, 0, &threadID );
if (WAIT_TIMEOUT == WaitForSingleObject( hThread, 5000 ))
{
TerminateThread(hThread, 1);
wcout << L"Process is Timed Out";
}
else
{
wcout << L"Process is Ended OK";
}
CloseHandle(hThread);
wcout << Counter;
}
unsigned int _stdcall DoSomething( void * /*dummy*/ )
{
while (1)
{
++Counter;
}
_endthreadex( 0 );
return …Run Code Online (Sandbox Code Playgroud)