c语言多线程线程不执行的原因
发布网友
发布时间:2022-12-23 01:51
我来回答
共2个回答
热心网友
时间:2024-11-26 17:20
故障现象
使用多线程的时候,主函数尚且还在执行,但子函数却不执行。
if __name__=='__main__':
print('Parent process %s.' % os.getpid())
p = Pool(processes = 4)
for i in range(30):
p.apply_async(func = stitch, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
如图所示,main会执行,但stitch就不会了。
原因分析
这是因为你的参数列表,也就是args和上面stitch函数的定义不一致。
解决方案
你只要把参数列表改为一致就可以了。
热心网友
时间:2024-11-26 17:20
关问题
日期:2014-05-17 浏览次数:20663 次
多线程中,有线程不执行的问题
问题:三个线程,其中第一个线程始终不执行程序.
代码如下:
private delegate void del();
private void clearControls()
{
Thread balance = new Thread(new ThreadStart deleteDataColumnsOfBalance));
balance.Start();
Thread income = new Thread(new ThreadStart(deleteDataColumnsOfIncome));
income.Start();
Thread cash = new Thread(new ThreadStart(deleteDataColumnsOfCash));
cash.Start();
while (!balance.IsAlive&&!income.IsAlive&&!cash.IsAlive) { Thread.Sleep(10); }
balance.Abort();
balance.Join();
income.Abort();
income.Join();
cash.Abort();
cash.Join();
}
/// <summary>
/// 自定义方法:删除DataGridView控件列
/// </summary>
/// <param name="dgv">指定DataGridView控件</param>
private void deleteDataColumnsOfBalance()
{
if (dgvBalance.InvokeRequired)
{
del d = new del(deleteDataColumnsOfBalance);
dgvBalance.Invoke(d);
}
else
{
for (int i = dgvBalance.Columns.Count - 1; i > 1; i--)
{
dgvBalance.Columns.Remove(dgvBalance.Columns[i]);
pgbar.PerformStep();